1
我有场(命名为creator
)的ModelForm
其中一个是ForeignKey
,所以{{ form.creator }}
Django的渲染<select>
标签是这样的:如何在Django中从ModelForm手动创建选择字段?
<select id="id_approver" name="approver">
<option selected="selected" value="">---------</option>
<option value="1">hobbes3</option>
<option value="2">tareqmd</option>
<option value="3">bob</option>
<option value="4">sam</option>
<option value="5">jane</option>
</select>
但我想添加一个onchange
事件属性,所以我可以使用AJAX后来做其他事情。我还想更改---------
以表示其他内容,并显示审批者的全名,而不是他们的用户名。
那么有可能获得可能的批准者列表并生成我自己的选择选项?有点像
<select id="id_approver" name="approver" onchange="some_ajax_function()">
<option select="selected" value="0">Choose a user</option>
{% for approver in form.approver.all %} <!-- This won't work -->
<option value="{{ approver.pk }}">{{ approver.get_full_name }}</option>
{% endfor %}
</select>
而且我还想到最审批的名单得到过大(如50),那么我会最终需要某种用于审批的可搜索自动完成场。那么我一定要写我自己的HTML。
万一有人需要它,我ModelForm
看起来是这样的:
class OrderCreateForm(ModelForm) :
class Meta :
model = Order
fields = (
'creator',
'approver',
'work_type',
'comment',
)
因此,对于你上面的'creator'例子,我不得不从'fields'在'OrderCreateForm'删除'creator'并添加'creator = MyCustomField(...)'的代码行?或者我把'creator'作为'fields'列表的一部分(在'class Meta'下面)? – hobbes3 2012-04-11 15:13:55
您应该删除它,因为您正在使用自定义字段进行渲染。 – 2012-04-11 17:34:07
因为我需要更复杂的'creator'列表,它依赖于'User',所以我最终对模板中'creator'的'