2016-03-21 3 views
0

У меня есть две моделиФильтр внешний ключ 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?

+0

Я нашел решение, сделал то же самое, как здесь http://stackoverflow.com/questions/19305964/change-queryset-of-model-field -in-inlineformset-of-non-parent-model – Stiig

ответ

1

self.form.fields как показано на рисунке here.

Обновление в ответ на комментарий

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

его можно использовать только в форме, как отправить запрос в форме из представления? 'formet = FormSet (formet = BaseFormSet, form = Form (???))' – Stiig

+0

обновленный ответ .. –

+0

Нет, 'FormSet()' не работает с аргументом ключевого слова 'form' и agrument' form' only only с 'inlineformset_factory', где его ссылка на класс – Stiig

Смежные вопросы