如何控制Django表单中的选择/选项

如何控制Django表单中的选择/选项,django,django-models,django-forms,django-templates,django-views,Django,Django Models,Django Forms,Django Templates,Django Views,使用Django,我的目标是创建一个带有select字段的表单,并使用db表TestTable中的值填充该表单 TestTable的字段是:id、desc1、desck2、desc3、desc4等 以下是我在form.py中的代码: class TestForm(forms.ModelForm): field1 = ModelChoiceField(queryset=TestTable.objects.all().order_by('desc1')) class Meta(obj

使用Django,我的目标是创建一个带有select字段的表单,并使用db表TestTable中的值填充该表单

TestTable的字段是:id、desc1、desck2、desc3、desc4等

以下是我在form.py中的代码:

class TestForm(forms.ModelForm):
    field1 = ModelChoiceField(queryset=TestTable.objects.all().order_by('desc1'))
    class Meta(object):
        model = BlockValue
        fields = ()
以下是模板:

<html>
<head><title>TEST PAGE</title></head>

<body>
Test: 
{{ form }} 

</body>
</html>
渲染表单时,结果是:

<tr><th><label for="id_field1">Field1:</label></th><td><select id="id_field1" name="field1">
<option value="" selected="selected">---------</option>
<option value="1">aaaaaaa</option>
<option value="3">bbbbbbb</option>
<option value="2">ccccccc</option>
</select></td></tr>

如何选择选项标签中打印的字段?

有两种方法。最快的方法是更改TestTable的_uunicode__;返回值,以返回您喜欢的字段。但是,您可能只希望以当前形式显示该字段,而不希望显示其他位置,因此这并不理想

第二个选项,您可以定义自己的表单字段。它继承ModelChoiceField,但覆盖来自\u实例方法的标签\u:


谢谢它完全起作用了。是否也有可能设置?我想它已经在这样做了,这是默认设置。你能仔细检查每一页的页面来源吗?
<tr><th><label for="id_field1">Field1:</label></th><td><select id="id_field1" name="field1">
<option value="" selected="selected">---------</option>
<option value="1">aaaaaaa</option>
<option value="3">bbbbbbb</option>
<option value="2">ccccccc</option>
</select></td></tr>
class TestTableModelChoiceField(forms.ModelChoiceField):
    def label_from_instance(self, obj):
         # return the field you want to display
         return obj.display_field

class TestForm(forms.ModelForm):
    type = TestTableModelChoiceField(queryset=Property.objects.all().order_by('desc1'))
class TestForm(forms.ModelForm):
    ...
    def __init__(self, *args, **kwargs):
        super(TestForm, self).__init__(*args, **kwargs) # initialize form, which will create self.fields dict
        self.fields['field1'].choices = [(o.id, str(o).upper()) for o in TestTable.objects.all()] # provide a list of tuples [(pk,display_string),(another_pk,display_str),...]
        # display string can be whatever str/unicode you want to show.