Django ModelForm 覆盖 __init__

Django ModelForm overriding __init__

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

没有出现错误,但我只得到一个空的 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

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

我可能遗漏了什么?谢谢!

最后一行正在覆盖上一行中分配的查询集。删除它。

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

我错误地选择了字段类型:正确的是 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