从模型的行中填充Django <select> <option>,而不是它的CHOICES

时间:2016-08-02 12:45:40

标签: django django-models django-forms

我有一个十几行的模型。 是否有快捷方式使用&lt; select&gt;制作表单其中每行的字段变为&lt; option&gt;。 我用Google搜索了这一点,但我找到的只是使用模型的选择元组作为&lt; select&gt;的方法。

1 个答案:

答案 0 :(得分:2)

您可以使用ModelChoiceField。这是外键的默认表单字段。

class MyForm(forms.formForm):
    my_field = forms.ModelChoiceField(queryset=MyModel.objects.all())

默认情况下,option的值将是主键,标签将由__str__方法给出。但你可以覆盖这个:

使用另一个字段作为值:

class MyForm(forms.formForm):
    my_field = forms.ModelChoiceField(queryset=MyModel.objects.all(),
                                      to_field_name='foo')
    # Where foo is a field of `MyModel`.

自定义标签

class MyCustomModelChoiceField(forms.ModelChoiceField):
    def label_from_instance(self, obj):
        return '{} ({})'.format(obj.foo, obj.bar)

class MyForm(forms.formForm):
    my_field = MyCustomModelChoiceField(queryset=MyModel.objects.all())