在 Django 的 inlineformset_factory 中选择外键元素的子集
Posted
技术标签:
【中文标题】在 Django 的 inlineformset_factory 中选择外键元素的子集【英文标题】:Select a subset of foreign key elements in inlineformset_factory in Django 【发布时间】:2011-05-28 15:28:01 【问题描述】:我有一个带有两个外键的模型:
class Model1(models.Model):
model_a = models.ForeignKey(ModelA)
model_b = models.ForeignKey(ModelB)
value = models.IntegerField()
然后,我创建一个内联表单集类,如下所示:
an_inline_formset = inlineformset_factory(ModelA, Model1, fk_name="model_a")
然后实例化它,像这样:
a_formset = an_inline_formset(request.POST, instance=model_A_object)
一旦在模板/页面中呈现此表单集,就会有与 model_b 字段关联的 ChoiceField。我遇到的问题是结果下拉菜单中的元素包括在 ModelB 表中找到的所有元素。我需要根据 ModelB 中的一些标准选择其中的一个子集。同时,我需要在实例化 inlineformset_factory 时保留对 model_A_object 实例的引用,因此不能只使用this 示例。有什么建议吗?
【问题讨论】:
刚刚添加了一个通用的django
标签,以便为不关注非常具体标签的人突出显示。
【参考方案1】:
你需要做的是change the ModelChoiceField's queryset
最简单的方法可能是对表单集的表单进行猴子补丁。您应该能够在构建表单集后立即执行此操作:
an_inline_formset.form.base_fields['model_b'].queryset = ModelB.objects.filter(whatever=True)
不是最漂亮的,但应该可以。
【讨论】:
以上是关于在 Django 的 inlineformset_factory 中选择外键元素的子集的主要内容,如果未能解决你的问题,请参考以下文章
django:如何在表单向导中使用 inlineformset?
在 Django inlineformset_factory 中过滤查询集
django - 具有多个 ForeignKey 的 inlineformset_factory
在 Django 的 inlineformset_factory 中选择外键元素的子集