Django Admin类自动填充用户字段 [英] Django Admin class to auto-populate user field
问题描述
forms.py:
class NoteForm 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)
admin.py
pre>
class NoteAdmin(admin.ModelAdmin):
def save_model(self,request,obj,form,change):
obj = form.save(commit = F $)
obj.owner = request.user
obj.save()
def save_formset(self,request,form,formset,change):
instances = formset.save(commit = False)
例如在实例中:
instance.user = request.user
instance.sav e()
else:
fromset.save_m2m()
admin.site.register(注意,Noteadmin)
views.py:
def create请求):
如果request.POST:
form = NoteForm(request.POST,request.FILES)
如果form.is_valid():
form.save()
return HttpResponceRedirect('/ notes / all')
else:
form = NoteForm()
args =
args.update(csrf(request))
args ['form'] = form
返回render_to_response('create_note.html',args)
我不明白Admin在这里的观点。从代码中,我所理解的是,为您的网站创建一个简单的django表单,并在表单提交时收到错误。如果是这样,解决方案很安静。由于您尝试在注释
模型中保存记录,而不引用 User
,因此会生成此错误。由于外键字段上有一个db约束,它会引发错误。解决方案很简单,只需将所有者
添加到表单中的列表中,或修改 save
方法来分配所有者到笔记。如果您使用第一个选项,用户将可以查看并选择所有者。如果您想预先填充该特定字段,请通过表单的初始值。
I am trying to populate the field 'owner' in the my NoteForm. I read in documentation that I need to use the Admin for that.But i still get this error : note_note.owner_id may not be NULL. Need help. Code:
forms.py:
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)
admin.py
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)
I do not understand the point of Admin over here. From the code, what I understood is you creating a simple django form for your site and getting the error on form submission. If that's case, the solution is quiet easy. This error is generated because you are try to save a record in your Note
model without any reference to User
. As there's a db constraint on the foreign key field, it raises the error. Solution is easy, just add owner
to the list of fields in the form or modify the save
method to assign an owner to the note. If you'll use the first option, the user will be able to see and select the owner. And if you want to pre-populate that particular field, pass initial value to the form.
这篇关于Django Admin类自动填充用户字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!