Django Admin类自动填充用户字段 [英] Django Admin class to auto-populate user field

查看:423
本文介绍了Django Admin类自动填充用户字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试填写我的NoteForm中的字段所有者。我阅读了文档,我需要使用Admin。但是我仍然收到这个错误:note_note.owner_id可能不是NULL。需要帮忙。代码:



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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆