【问题标题】:Django ModelForm overriding __init__Django ModelForm 覆盖 __init__
【发布时间】:2016-03-20 02:45:13
【问题描述】:

我正在尝试使用当前用户所属的 Django 组填充 ModelForm 的 Select 列表。

没有出现错误,但我只得到一个空的选择列表。

这是我的代码:

class ArchiveForm(forms.ModelForm):

    class Meta:
        model = Archive
        fields = ['tags', 'version', 'sharegp']
        localized_fields = None
        labels = {'tags': 'Related Keywords'}


    sharegp = forms.ChoiceField(label='Share with groups')

    def __init__(self, user, *args, **kwargs):

        #import pudb;pudb.set_trace()
        self.user = user
        super(ArchiveForm, self).__init__(*args, **kwargs)
        self.fields['sharegp'].queryset = Group.objects.filter(user=self.user)
        self.fields['sharegp'].widget.choices = self.fields['sharegp'].choices

请注意,如果我在__init__ 方法的第一行中启用调试器,并沿该函数前进,则该行:

    self.fields['sharegp'].queryset

提供包含该用户组的正确列表,但不会传递给实际表单。

我会错过什么?谢谢!

【问题讨论】:

    标签: python django django-forms modelform


    【解决方案1】:

    这就是我最终解决这个问题的方法:

    我选错了字段类型:正确的是ModelChoiceField:

    class ArchiveForm(forms.ModelForm):
    
        class Meta:
            model = Archive
            fields = ['tags', 'version', 'sharegp']
            localized_fields = None
            labels = {'tags': 'Related Keywords'}
    
        user = None
        usergroups = None
        sharegp = forms.ModelChoiceField(label='Share with groups', queryset=usergroups)
    
        def __init__(self, user, *args, **kwargs):
    
            self.user = user
            self.usergroups = Group.objects.filter(user=self.user)
            super(ArchiveForm, self).__init__(*args, **kwargs)
            self.fields['sharegp'].queryset = self.usergroups
    

    【讨论】:

      【解决方案2】:

      最后一行覆盖了前一行中分配的查询集。删除它。

      【讨论】:

      • AFAIK 它正在覆盖表单小部件的选择集,我同意这种覆盖是多余的,但根本没有查询集的橡皮擦。
      • 我不确定,但@daniel-roseman 是一个答案,或者它可能是对答案的评论?
      猜你喜欢
      • 2012-04-10
      • 1970-01-01
      • 2020-06-14
      • 2012-01-31
      • 2018-02-01
      • 2015-03-15
      • 1970-01-01
      • 2011-07-12
      • 2010-10-23
      相关资源
      最近更新 更多