如何控制Django表单中的选择/选项
使用Django,我的目标是创建一个带有select字段的表单,并使用db表TestTable中的值填充该表单 TestTable的字段是:id、desc1、desck2、desc3、desc4等 以下是我在form.py中的代码:如何控制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
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.