У меня есть две моделиФильтр внешний ключ QuerySet модель InlineFormSet
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
?
Я нашел решение, сделал то же самое, как здесь http://stackoverflow.com/questions/19305964/change-queryset-of-model-field -in-inlineformset-of-non-parent-model – Stiig