我有一个django模型表单'Recipe',其中有一个外键字段指向模型'Ingredient'。
在呈现表单时,我得到了一个SELECT列表,它的ID与配料ID匹配,文本显示与字段的字符串表示相同。
但是,我想向选择列表添加一个数据属性,该属性与来自Ingredient查询集的呈现选项相匹配。
例如,假设这是当前正在渲染的内容:
<option value="1158">Carrots</option>
<option value="1159">Strawberry</option>
<option value="1160">Onion</option>
<option value="1161">Spinach</option>
但我想为相关对象添加一个数据属性:
<option value="1158" data-ingredient-type="vegetable">Carrots</option>
<option value="1159" data-ingredient-type="fruit">Strawberry</option>
<option value="1160" data-ingredient-type="vegetable">Onion</option>
<option value="1161" data-ingredient-type="vegetable">Spinach</option>
4条答案
按热度按时间rsaldnfx1#
一种方法是使用自定义Select小部件,该小部件允许通过小部件选项的
label
部分传递选项中的各个属性:(代码来自这个伟大的答案)要填充单个选项,请覆盖
ModelChoiceField
子类上的label_from_instance
方法(参见django docs):最后,在表单中简单使用此字段:
wooyq4lh2#
为什么不手动渲染字段?
就像
或者可能在你的模型表单类中你给它添加了属性,但是这必须是一个字符串(或者可能是一个函数)
axzmvihb3#
我的解决方案是创建一个覆盖
create_option()
的自定义小部件:然后,您需要指定用于表单中配料字段的小部件:
感谢In Django form, custom SelectField and SelectMultipleField为我指明了这个解决方案。
我对这个解决方案并不完全满意,因为它假设
value
是Ingredient
的pk
,并执行直接数据库查询以获取Ingredient
选项,似乎模型对象应该可以从ModelChoiceField
获得,但我无法找到获取它的方法。mzillmmw4#
这在新版Django上变得容易多了:
在配方模型表单中,将其用作: