Django:使用当前用户作为项目模型的外键

帕特里克·麦克古安

我正在构建一个Web应用程序,人们可以在其中编写项目。这些项目存储在模型中,我想将用户用作外键,以便可以在网页上向用户显示他们的项目。实例是通过表单输入的。

该代码始终分配默认值(1),而不是用户。你们中有人可以看到导致此错误的原因吗?

以下是在models.py中创建模型的代码:

class PersonalProject(models.Model):
    user = models.ForeignKey(User, default=1, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    description = models.TextField()
    code = models.TextField()

def __str__(self):
    return self.title

以下是用于在views.py中创建项目的表单视图的代码:

def newproject(request):

    if User is None:
        messages.error(request, "Must be signed in")
        return redirect('main:dashboard')

    if request.method == "POST":
        form = NewProjectForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('main:dashboard')
        else:
            messages.error(request, "Error")
    else:
        form = NewProjectForm()

    return render(request,
                "main/newproject.html",
                {"form":form})

这是views.py中主页视图的代码:

def dashboard(request):
    messages.info(request, request.user.username)
    return render(request=request,
                template_name="main/dashboard.html",
                context={"structuredprojects": StructuredProject.objects.all(), "personalprojects": PersonalProject.objects.filter(user__username=request.user.username)})

我真的希望您能提供帮助-我已经坚持了一段时间

威廉·范昂塞姆

您可以将包装在表单中的实例的用户设置为request.user

from django.contrib.auth.decorators import login_required

@login_required
def newproject(request):
    if request.method == "POST":
        form = NewProjectForm(request.POST, request.FILES)
        if form.is_valid():
            form.instance.user = request.user
            form.save()
            return redirect('main:dashboard')
        else:
            messages.error(request, "Error")
    else:
        form = NewProjectForm()

    return render(request,
                "main/newproject.html",
                {"form":form})

注意:您可以使用@login_required装饰器[Django-doc]将视图限制为已认证用户的视图

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章