我正在尝试使用 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
答案 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
)
# …