【问题标题】:Autofill my author field with foreign key用外键自动填充我的作者字段
【发布时间】:2021-09-04 12:16:36
【问题描述】:

我正在尝试在我的笔记项目中使用 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

【问题讨论】:

  • 分享您的TaskForm

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


【解决方案1】:

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

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
    )
    # …

【讨论】:

    猜你喜欢
    • 2021-07-17
    • 2022-09-30
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    相关资源
    最近更新 更多