在Django中的inlineformset_factory中选择外键元素的子集

时间:2010-12-21 05:16:31

标签: django django-models django-forms django-views django-queryset

我有一个带有两个外键的模型:

class Model1(models.Model):
  model_a = models.ForeignKey(ModelA)
  model_b = models.ForeignKey(ModelB)
  value = models.IntegerField()

然后,我创建一个内联formset类,如下所示:

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示例。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您需要做的是change the ModelChoiceField's queryset

最简单的方法可能是修补formset的形式。您可以在使用以下命令构建formset后立即执行此操作:

an_inline_formset.form.base_fields['model_b'].queryset = ModelB.objects.filter(whatever=True)

不是最漂亮的,但应该有效。