Django基于数据库查询创建选择

时间:2014-12-12 01:20:20

标签: python django django-forms

我正在编写一个Django 1.7应用程序,它需要根据对存储在数据库中的合作企业的查询来创建表单的选择列表。此业务列表可以随时更改,表单选项需要在需要时自动重新填充。我创建了一个名为PartneredBusiness的模型,它存储了所有需要的业务信息。我还创建了一个表单:

class StartPartneredDeliveryForm(Form):

def __init__(self, *args, **kwargs):
    super(StartPartneredDeliveryForm, self).__init__(*args, **kwargs)
    self.fields['partnered_business'].choices = \
        [(business.id, business.contact.organization_name) \
        for business in PartneredBusiness.objects.all()]

destination_address = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Destination'}))
partnered_business = forms.ChoiceField(widget=forms.RadioSelect(), choices=())

这开始似乎工作正常,但如果我在数据库中添加新业务,表单显示的PartneredBusinesses列表似乎不会更新选择列表,直到我通过停止并重新启动服务器来重新启动服务器正在运行python3 manage.py runserver

任何人都可以提供一些线索吗?

1 个答案:

答案 0 :(得分:1)

你需要在构造函数中实例化你的字段(而不是它的选择):

class StartPartneredDeliveryForm(Form):
    def __init__(self, *args, **kwargs):
        super(StartPartneredDeliveryForm, self).__init__(*args, **kwargs)

        choices = [(business.id, business.contact.organization_name) 
                   for business in PartneredBusiness.objects.all()]

        self.fields['partnered_business'] = forms.ChoiceField(widget=forms.RadioSelect(),
                                                              choices=choices)