使用外键自动填充我的作者字段

时间:2021-06-20 15:44:00

标签: django django-models django-rest-framework django-views django-forms

我正在尝试使用 django 中的身份验证自动填充我的笔记项目中的用户外键。我试过了,但它不起作用,并要求所有者是必填字段。请帮忙!提前致谢。

views.py

@login_required(login_url='login')
def index(request):
    tasks = Task.objects.filter(owner=request.user)
    form = TaskForm()
    if request.method=='POST':
        form = TaskForm(request.POST)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.owner = request.user
            instance.save()
    context = {
    'tasks':tasks,
    'form':form,
        }
    return render(request, 'list.html',context)

models.py

 class Task(models.Model):
    title = models.CharField(max_length=200)
    completed = models.BooleanField(default=False)
    created = models.DateTimeField(auto_now_add=True)
    owner = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE
    )

    def __str__(self):
        return self.title

1 个答案:

答案 0 :(得分:0)

由于您自己填写所有者,因此将所有者指定为表单字段是没有意义的。因此,您应该排除它,并让视图处理它。表格如下所示:

class TaskForm(forms.ModelForm):
    class Meta:
        model = Task
        exclude = ['owner']

如果没有 ModelForm 需要指定所有者,您可以将该字段标记为不可编辑:

class Task(models.Model):
    # …
    owner = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        editable=False
    )
    # …