我的表单类中有一个ChoiceField,可能是一个用户列表。如何使用我的用户模型中的用户列表预填充?
我现在拥有的是:
class MatchForm(forms.Form):
choices = []
user1_auto = forms.CharField()
user1 = forms.ChoiceField(choices=choices)
user2_auto = forms.CharField()
user2 = forms.ChoiceField(choices=choices)
def __init__(self):
user_choices = User.objects.all()
for choice in user_choices:
self.choices.append(
(choice.id, choice.get_full_name())
)
这似乎不起作用(否则我不会在这里)。想法?
澄清一下,当我尝试在模板中渲染此表单时,除非我删除ChoiceFields和__init__()
方法,否则它不会输出任何内容。
另外,如果我只想在我的字段中列出用户的全名,该怎么办?也就是说,我想控制每个用户对象的显示输出(因此ModelChoiceField
不是一个选项)。
答案 0 :(得分:26)
看起来您可能正在寻找ModelChoiceField
。
user2 = forms.ModelChoiceField(queryset=User.objects.all())
这不会显示全名,但它只会在每个对象上调用__unicode__
来获取显示的值。
如果您不想只显示__unicode__
,我会执行以下操作:
class MatchForm(forms.Form):
user1 = forms.ChoiceField(choices = [])
def __init__(self, *args, **kwargs):
super(MatchForm, self).__init__(*args, **kwargs)
self.fields['user1'].choices = [(x.pk, x.get_full_name()) for x in User.objects.all()]
答案 1 :(得分:1)
class MatchForm(forms.Form):
choices = tuple(User.objects.all().values_list())
user1_auto = forms.CharField()
user1 = forms.ChoiceField(choices=choices)
user2_auto = forms.CharField()
user2 = forms.ChoiceField(choices=choices)
这应该有用。