我想同时显示几个模型选择字段,每个字段都包含来自同一模型但具有不同查询集的数据。为此,我应该使用一个表单集还是多个表单来传递给模板?
我已经尝试过使用表单集。
形式:
class ValueForm(forms.Form):
value = forms.ModelChoiceField(queryset = ValueTable.objects.all())
看法:
filter_value1 = ValueTabel.objects.filter(group = 1)
filter_value2 = ValueTabel.objects.filter(group = 3)
TmpFormSet = formset_factory(ValueForm, extra=0)
form = TmpFormSet(queryset=filter_value1,filter_value2)
这是我在数据库中的记录:
ValueTable(group, value):
1, Value1
1, Value2
1, Value3
2, Value4
3, Value5
3, Value6
Group(group, attribute)
1, attribute1
2, attribute2
3, attribute1
选择模型组上的属性 1(记录 1 和 3),我将同时显示两个具有以下选项的表单:
modelchoicefield 1:
Value1
Value2
Value3
modelchoicefield 2:
Value5
Value6
如何将两个查询集手动添加到表单集?
表单集用于为每个模型实例显示一个表单,并且只允许您为所有实例设置自定义参数。
您在这里尝试实现的是动态设置每个实例的值字段的查询集(也就是每个实例都不同),所以我不相信您将能够使用表单集实现您想要的。
只需创建一个循环并通过将正确的查询集传递给每个表单字段来手动实例化每个表单。
使用您提供的示例,它看起来像这样:
value_queryset1 = ValueTabel.objects.filter(group = 1)
value_queryset2 = ValueTabel.objects.filter(group = 3)
value_querysets = [value_queryset1, value_queryset2]
value_forms = []
for value_queryset in value_querysets:
value_form = ValueForm()
value_form.fields["value"].queryset = value_queryset
value_forms.append(value_form)
您还可以覆盖 的init
方法ValueForm
以使其看起来不那么凌乱,但从技术上讲它们是相同的。
我希望它是有道理的,并帮助你解决这个问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句