Django Admin类自动填充用户字段

时间:2013-11-29 12:43:31

标签: python django admin auto-populate

我正在尝试在我的NoteForm中填充字段'owner'。我在文档中读到我需要使用Admin。但是我仍然会收到此错误:note_note.owner_id可能不是NULL。需要帮忙。代码:

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)

1 个答案:

答案 0 :(得分:1)

我不明白管理员在这里的意思。从代码中,我理解的是您为您的网站创建一个简单的django表单并在表单提交时收到错误。如果是这种情况,解决方案很容易安静。生成此错误是因为您尝试在Note模型中保存记录而不引用User。由于外键字段存在db约束,因此会引发错误。解决方案很简单,只需将owner添加到表单中的字段列表中,或修改save方法即可将所有者分配给注释。如果您将使用第一个选项,则用户将能够查看并选择所有者。如果您想预先填充该特定字段,请传递initial value to the form