我正在尝试使用当前用户所属的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
提供正确的列表,其中包含该用户的组,但不会传递给实际表单。
我可能会缺少什么?谢谢!
最佳答案
这就是我最终解决此问题的方式:
我错误地选择了字段的类型:正确的是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
关于python - Django ModelForm覆盖__init__,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34270099/