Python Django管理类自动填充用户字段
我正在尝试填充my NoteForm中的字段“owner”。我在文档中读到我需要使用管理员来完成这项工作。但是我仍然得到了这个错误:note\u note.owner\u id可能不是空的。我需要帮助。代码: forms.py:Python Django管理类自动填充用户字段,python,django,admin,auto-populate,Python,Django,Admin,Auto Populate,我正在尝试填充my NoteForm中的字段“owner”。我在文档中读到我需要使用管理员来完成这项工作。但是我仍然得到了这个错误:note\u note.owner\u id可能不是空的。我需要帮助。代码: forms.py: class NoteForm(forms.ModelForm): class Meta: model = Note fields = ('title','body') models.py: class Note(models.Model):
class NoteForm(forms.ModelForm):
class Meta:
model = Note
fields = ('title','body')
models.py:
class Note(models.Model):
title = models.CharField(max_length=200)
body = models.TextField()
cr_date = models.DateTimeField(auto_now_add=True)
owner = models.ForeignKey(User, blank=False)
管理员
class NoteAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
obj = form.save(commit=False)
obj.owner = request.user
obj.save()
def save_formset(self, request, form, formset, change):
instances = formset.save(commit=False)
for instance in instances:
instance.user = request.user
instance.save()
else:
fromset.save_m2m()
admin.site.register(Note, Noteadmin)
views.py:
def create(request):
if request.POST:
form = NoteForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return HttpResponceRedirect('/notes/all')
else:
form = NoteForm()
args = {}
args.update(csrf(request))
args['form'] = form
return render_to_response('create_note.html', args)
我不明白这里的管理要点。从代码中,我理解的是您为您的站点创建了一个简单的django表单,并在表单提交时出错。如果是这样的话,解决方案就简单多了。产生此错误的原因是您试图在
备注
模型中保存一条记录,而不引用用户
。由于外键字段上有db约束,因此会引发错误。解决方法很简单,只需将owner
添加到表单中的字段列表中,或修改save
方法,将所有者分配给注释。如果使用第一个选项,用户将能够看到并选择所有者。如果您想预先填充该特定字段,请通过。谢谢您的发布。我认为这是Django框架中最愚蠢的事情之一。这太疯狂了。我以UserA身份登录,我要创建一个新的便笺,我需要决定创建此帖子的用户。因此,我将在列表中看到数千个用户名。你在任何网站上看到过吗?当然,您需要注意的是,由登录的用户自动填充。这一切都发生在django中,因为用户有会话。我阅读了文档,但我无法理解。您能帮助我吗。像这样的?模型注释中的owner=NoteForm(initial={'username':'instance'},auto_id=False)?您只想预填充username吗?看一看。它有一个函数get_initial()
,用于Form
获取字段的初始值。它返回一个字典。在该命令中,添加{'username':self.request.user.username}
,表单将用所需的用户名初始化。