繁体   English   中英

使用包含RadioSelect小部件的ModelChoiceField在ModelForm中的queryset中获取request.user

[英]Get request.user in queryset in a ModelForm with a ModelChoiceField that contains a RadioSelect widget

我想问一下社会关于通过以下request.userquerysetModelForm 我的ModelForm是:

class goForm(ModelForm): 
    user_choice = goModelChoiceField(
            widget=forms.RadioSelect,
            queryset=Document.objects.all().filter(who_upload=request.user),
            empty_label=None,
            to_field_name='docfile',
            label = 'Please select'
            )            
    class Meta:
        model = go
        fields = ['user_choice']

class goModelChoiceField(forms.ModelChoiceField):
        def label_from_instance(self, obj):
            return  "'%s' uploaded on %s" % (obj.file_name, 
                obj.when_upload.date()) 

我找到的所有答案都是指将request.user传递给__init__或者使用筛选选项填充视图中的goForm 但是似乎没有任何在我的情况下工作,因为我有子类的形式返回一个特定的字符串,也是我现在用的是RadioSelect是需要专门的小部件queryset作为一个参数(我不是100%确定的事情)。 那么如何在user_choice传递request.user

模型选择字段文档显示如何在__init__方法中设置查询集。

class goForm(ModelForm): 
    user_choice = goModelChoiceField(
        widget=forms.RadioSelect,
        queryset=None,
        empty_label=None,
        to_field_name='docfile',
        label = 'Please select'
        )            

    def __init__(self, user, *args, **kwargs):
        super(goForm, self).__init__(*args, **kwargs)
        self.fields['user_choice'].queryset = Document.objects.all().filter(who_upload=user)

    class Meta:
        model = go
        fields = ['user_choice']

请注意, __init__方法现在将用户作为参数,因此请记住在视图中实例化表单的任何位置传递它。 例如:

form = goForm(user=request.user, data=request.POST)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM