Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
访问Django表单类中的用户数据_Django_Django Forms_Request - Fatal编程技术网

访问Django表单类中的用户数据

访问Django表单类中的用户数据,django,django-forms,request,Django,Django Forms,Request,我有一个表单,我想使用用户数据来过滤choicefield的内容。 接下来,我在表单类的\uuu init\uuu函数中添加了对user的所有引用: class MyChoiceField(forms.Form): def __init__(self, *args, **kwargs): self.user = kwargs.pop('user') super(MyChoiceField, self).__init__(*args, **kwargs)

我有一个表单,我想使用用户数据来过滤choicefield的内容。 接下来,我在表单类的
\uuu init\uuu
函数中添加了对
user
的所有引用:

class MyChoiceField(forms.Form):
    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user')
        super(MyChoiceField, self).__init__(*args, **kwargs)
        user_id = self.user.id
        myobjects = forms.ModelChoiceField(label='',queryset = Myobject.objects.values_list('name', flat=True).exclude(name__isnull=True).filter(Q(person__isnull=True) | Q(person=user_id)).distinct(),empty_label=None)
在我看来,我称之为:

def my_view(request):    
    my_list = MyChoiceField(user = request.user) 
    context = {
                'my_list': my_list,
                }
    return render(request, 'foo/bar.html', context)
调试
\uuuu init\uuuu
部分表明queryset内容正确,但在视图中,“我的列表”包含以下内容:
。 我是否应该在form类中包含
\uuuu init\uuuu>部分之外的内容以使其正常工作?

试试这个

class MyChoiceField(forms.Form):
    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user')
        super(MyChoiceField, self).__init__(*args, **kwargs)
        user_id = user.id

这里有几个问题。您没有向表单传递
请求。POST
,因此表单没有任何数据
MyForm
比不是字段的
MyChoiceField
更好。使用
modelcooicefield
时,
queryset
应返回常规queryset,不应使用
values\u list
。也许您需要一个常规的
表单。选择字段
,或者使用
label\u from\u instance
自定义显示方式。@Alasdair非常感谢,我尝试传递
请求。POST
现在
我的列表
的绑定参数变成了
True
(即
)。但是,表单仍然没有显示在页面上。以前,我有一个不依赖于用户的查询(因此在
\uuuuu init\uuuu
部分之外),表单运行良好。有没有进一步的提示/想法来解释它为什么不起作用?您似乎还没有解决该字段的
queryset
的问题。然而,我发现了另一个问题。您需要更新
self.fields['myfield']
,就像您链接到的问题一样。设置
myfield=forms.ModelChoiceField(…)
将不起作用。@感谢阿拉斯达尔发现这一点!如前一个问题中所述更新字段解决了我的问题,过滤后的表单现在正确显示。关于您的
queryset
评论,实际上我发现
modelcooicefield
即使在
value\u list
中也适用于我,而在尝试
forms.ChoiceField
时却不适用。我记下了你关于为以后定制显示的其他建议,但现在我的主要问题已经解决了。哈,谢谢你,如果我仍然像我原来的帖子一样使用
表单。ModelChoiceField
,那么这确实也行得通。您是否介意解释一下为什么您的解决方案比原始解决方案更可取(即
self.user=kwargs.pop('user')
)?