在 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 中选择外键元素的子集

在inlineformset的形式中,我怎么知道哪些是我的默认表单字段,哪些是Django添加的字段?

django InlineFormsets错误报告,其中formset错误列表为空