如何填充下拉列表表单?

0 投票
1 回答
1174 浏览
提问于 2025-04-18 06:54

请帮忙动态地从数据库中填充下拉列表的表单值。

models.py:

class Gender(models.Model):     
    gender = models.CharField(
        max_length=10, 
        blank=False,
    )   

    @classmethod
    def get_gender_list(self):
        return self.objects.all()

forms.py:

class SearchFriendsForm(forms.Form):
    gender = forms.ChoiceField(
        widget=forms.Select, 
        choices=Gender.get_gender_list(),   # not worked
        #choices=(('1', '1'), ('2', '2')),  # worked
        label='Пол',
    )

friends_search.html:

{{ form.gender }}

出现的错误信息是:

'Gender' object is not iterable
Request Method: GET
Request URL:    http://127.0.0.1:8000/userprofile/friends_search/
Django Version: 1.6.2
Exception Type: TypeError
Exception Value:    
'Gender' object is not iterable
Exception Location: C:\Python33\lib\site-packages\django\forms\widgets.py in render_options, line 528

1 个回答

2

在ChoiceField中,choices的工作方式是这样的:

CHOICES=(
    ('id1', _("value1")),
    ('id2', _("value2")),
)

所以,要在你的选择字段gender中获取选项,你需要像上面那样构建一个列表。

这是我做的方式:

CHOICES=[]
for x in Gender.get_gender_list():
   CHOICES.append((x.id, x.gender))

最后:

class SearchFriendsForm(forms.Form):
    gender = forms.ChoiceField(
        widget=forms.Select, 
        choices=CHOICES,
        label='Пол',
    )

撰写回答