【问题标题】:how to populate a dropdown list forms? [duplicate]如何填充下拉列表表单? [复制]
【发布时间】:2014-07-06 08:57:56
【问题描述】:

帮助请从数据库中动态填写下拉列表表单值。

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

【问题讨论】:

  • 这是解决问题。谢谢!

标签: python django


【解决方案1】:

在 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='Пол',
    )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    相关资源
    最近更新 更多