我有以下表格:
from models import MyModel
class MultProgresemosReferenciasForm(forms.Form):
selected = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple,
queryset=MyModel.objects.filter(active=True))
我将在以下模板中使用:
<form action="" method="post">
{% for field in form %}
{{ field }}
{% endfor %}
{% csrf_token %}
<input type="submit" value="Submit Selected" />
</form>
其中呈现以下html:
<form action="" method="post">
<ul>
<li><label for="id_selected_1"><input type="checkbox" name="selected" value="9" id="id_selected_8" /> prog 1420000930 - pp 0.0078125</label></li>
<li><label for="id_selected_2"><input type="checkbox" name="selected" value="10" id="id_selected_9" /> prog 1420001041 - pp 0.00390625</label></li>
</ul>
<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='csrf_token_hash_string...' /></div>
<input type="submit" value="Submit Selected" />
</form>
正如您所看到的,模板为每个复选框获取了一些标签(来自模型,其中有两个字符串字段,其中包含您可以看到的值)。
问题是,我如何进入复选框的标签并自定义它们?我正在尝试使用这些相同型号的名称,但需要进行一些调整。有没有一种简单的方法可以在django中实现这一目标?
我尝试过使用field.label,但我得到的只是整个ChoiceField的'Selected'标签。这不是我想要的,我需要进入每个生成的复选框的标签......
答案 0 :(得分:5)
我认为您希望覆盖表单label_from_instance
将调用模型的 unicode 方法,以生成对象的字符串表示形式,以便在字段的选择中使用;提供自定义表示,子类ModelChoiceField和覆盖label_from_instance。此方法将接收模型对象,并应返回适合表示它的字符串。例如:
def label_from_instance(self, obj):
#custom logic here...
return smart_unicode(obj)