【问题标题】:Filter foreign key queryset model in InlineFormSet在 InlineFormSet 中过滤外键查询集模型
【发布时间】:2016-07-07 22:43:11
【问题描述】:

我有两个模型

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如何过滤产品?

【问题讨论】:

标签: python django django-models django-forms


【解决方案1】:

使用self.form.fields,如图所示here

根据评论更新

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

【讨论】:

  • 只能在表单中使用,如何从视图中发送表单中的queryset? formset = FormSet(formset=BaseFormSet, form=Form(???))
  • 不,FormSet() 不适用于关键字参数 form 和 agrument form 仅适用于 inlineformset_factory,其中他的他引用类
猜你喜欢
  • 2013-09-17
  • 2018-04-14
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 2020-10-22
  • 2019-09-06
  • 2013-10-18
  • 2014-01-08
相关资源
最近更新 更多