我有两个型号
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
的产品?
答案 0 :(得分:1)
使用显示here的self.form.fields
。
更新以回复评论
form = OrderItemForm()
form.product.queryset = Product.objects.filter(..filter here..)
formset = FormSet(formset=BaseFormSet, form=form)