Django表单,使用嵌套(optgroup)显示来自其他两个表的相关数据<;选择>;
我正在尝试使用正确的Django表单复制这个手动创建的Django表单,使用嵌套(optgroup)显示来自其他两个表的相关数据<;选择>;,django,forms,Django,Forms,我正在尝试使用正确的Django表单复制这个手动创建的的功能 {% regroup roll_counts by get_type_display as roll_list %} <select name="film"> <option>Select a film</option> {% for type in roll_list %} <optgroup label="{{ type.grouper }}">
的功能
{% regroup roll_counts by get_type_display as roll_list %}
<select name="film">
<option>Select a film</option>
{% for type in roll_list %}
<optgroup label="{{ type.grouper }}">
{% for film in type.list %}
<option value="{{film.id}}">{{ film.manufacturer }} {{ film.name }} ({{ film.count }})</option>
{% endfor %}
</optgroup>
{% endfor %}
</select>
我试图使用某种DjangoModelForm
重新创建它,以便能够实际验证提交到表单的数据。最终目标是能够“装载”一卷胶卷的相机。也就是说:将卷
(带有胶片
外键)与特定的摄像机
关联,并将所述摄像机标记为已加载状态
。因此,
显示表单未更新的数据。需要修改的是Roll
和Camera
型号,而不是Film
型号。但是我假设所有这些都可以在从表单接收数据的视图中处理
我不确定如何获得一个ModelForm
来显示前面提到的roll\u count
查询(以及嵌套的/optgroup
),因为它与胶片
模型上的单个字段无关
关于如何进行有什么想法吗
更新:
接受的答案解决了谜题的嵌套部分,但另一部分是将数据从视图传递到表单和字段工作的查询集
在视图中,可以将任何需要的内容传递给表单实例:
form = LoadCameraForm(owner=owner, format=camera.format)
在表单中,我添加了一个自定义的\uuuu init\uuuu
(请注意*args
和**kwargs
之间的所有者、格式
):
(我仍然不确定如何让我的带注释的count
显示出来。)
然后,要将所有部分放在一起,表单中的字段条目如下所示:
roll_counts = Film.objects\
.filter(roll__owner=owner, roll__status='storage')\
.filter(format=camera.format)\
.annotate(count=Count('name'))\
.order_by('type')
roll_counts = GroupedModelChoiceField(\
label='Pick a film to load',\
queryset=None,\
group_by_field='type')
没有内置的表单字段可以执行您想要的操作,因此您必须创建自己的自定义字段和一个小部件,以便将字段呈现为HTML。看看django.forms.fields模块,您将看到表单字段是如何定义的。尽管对一些人来说,要把它做好可能是一个挑战
老实说,我建议您搜索另一个显示表单的选项。您可以为类型
设置一个选择字段,选中后,您可以使用ajax加载胶片
的选项
只有我的2美分:)没有内置的表单字段可以满足您的需要,因此您必须创建自己的自定义字段和一个小部件,以便将字段呈现为HTML。看看django.forms.fields模块,您将看到表单字段是如何定义的。尽管对一些人来说,要把它做好可能是一个挑战
老实说,我建议您搜索另一个显示表单的选项。您可以为类型
设置一个选择字段,选中后,您可以使用ajax加载胶片
的选项
就我的2美分:)我做过一次!请看我的代码片段:)我做过一次!在这里查看我的代码片段:)很酷,谢谢!我希望将类型
内置于此中的原因是,此表单显示在用户已选择相机的页面上,它将仅显示与该相机兼容的胶片。很酷,谢谢!我想将类型
内置于此的原因是,此表单显示在用户已选择相机的页面上,并且它将只显示与该相机兼容的胶片。这正是我所需要的:这正是我所需要的:您将如何获得“显示”选择字段的文本(如果该字段是您分组的依据)?如果该字段是您分组的依据,您将如何获取选择字段的“显示”文本?
roll_counts = GroupedModelChoiceField(\
label='Pick a film to load',\
queryset=None,\
group_by_field='type')