Django表单,使用嵌套(optgroup)显示来自其他两个表的相关数据<;选择>;

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 }}">

我正在尝试使用正确的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 }}">
        {% for film in type.list %}
        <option value="{{film.id}}">{{ film.manufacturer }} {{ film.name }} ({{ film.count }})</option>
        {% endfor %}
    </optgroup>
    {% endfor %}
</select>
我试图使用某种Django
ModelForm
重新创建它,以便能够实际验证提交到表单的数据。最终目标是能够“装载”一卷胶卷的相机。也就是说:将
(带有
胶片
外键)与特定的
摄像机
关联,并将所述摄像机标记为
已加载状态
。因此,
显示表单未更新的数据。需要修改的是
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')