Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django管理类自动填充用户字段_Python_Django_Admin_Auto Populate - Fatal编程技术网

Python Django管理类自动填充用户字段

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):

我正在尝试填充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): 
    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}
,表单将用所需的用户名初始化。