【发布时间】:2020-04-29 15:48:31
【问题描述】:
假设我们有这个模型:
class Creation(models.Model):
title = models.CharField(max_length=DEFAULT_LENGTH)
url = models.CharField(max_length=DEFAULT_LENGTH)
date = models.DateTimeField('date published', default=datetime.date.today)
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)
def __str__(self):
return self.title
让我们使用这个视图:
def submit(request):
FormSet = modelformset_factory(Creation, fields=('title', 'url'))
if request.method == 'POST':
formset = FormSet(request.POST, request.FILES)
if formset.is_valid():
obj = formset.save(commit=False)
obj.author = request.user
obj.save()
else:
formset = FormSet
return render(request, 'app/submit.html', {'formset': formset})
我保存 formset 到 obj 并添加 request.user 并将其提交到数据库。
这不起作用,因为现在 django 会抛出一个错误,上面写着
'list' 对象没有属性'author'
这很有意义,因为上面的字段列表中没有author。
但是如果我将“作者”添加到fields,则会在通过{{formset}} 呈现模板时显示另一个选择框。
也许我可以编写自己的模板代码而不是使用{{formset}}并省略作者,但我觉得Django3.0必须有更优雅的方式。有吗?
我要做的就是让外键author(见上面的模型)填充登录用户。
【问题讨论】:
标签: python-3.x forms model django-3.0