在InlineFormSet中过滤外键查询集模型

时间:2016-03-21 12:16:10

标签: python django django-models django-forms

我有两个型号

class Order:
    ...

class OrderItem:
    order = models.ForeignKey(Order, related_name='products')
    product = models.ForeignKey(Product)

class Product:
    user = models.ForeignKey(User)
    ...

我从这些模型创建InlineFormSet

FormSet = inlineformset_factory(Order, OrderItem)

在我看来,我称之为

formset = FormSet()

但我可以在product ModelChoiceField中获取所有产品。如何过滤用户拥有的产品?

如果我这样做:

class BaseFormSet(BaseInlineFormSet):
    def __init__(self, *args, product_queryset=None, **kwargs):
        super().__init__(*args, **kwargs)

        if product_queryset:
            self.form.base_fields['product'].queryset = product_queryset

...

formset = FormSet(formset=BaseFormSet)

一切正常,但在Django编写的文档中

  

请注意不要更改base_fields属性   https://docs.djangoproject.com/en/1.9/ref/forms/api/#accessing-the-fields-from-the-form

如何过滤没有base_fields的产品?

1 个答案:

答案 0 :(得分:1)

使用显示hereself.form.fields

更新以回复评论

form = OrderItemForm()
form.product.queryset = Product.objects.filter(..filter here..)
formset = FormSet(formset=BaseFormSet, form=form)