2016-10-30 3 views
0

Я использую ModelChoiceField для выбора поставщика счетов в своих формах. В текущем случае я возвращаю всех Провайдеров к набору запросов.Как получить текущий подписанный пользователь в forms.py?

Но я должен вернуть только поставщиков, созданных подписываемым пользователем. У провайдера есть поле ForeignKey с именем user.

Вот моя форма:

class InvoiceCreationForm(forms.Form): 
    # ... 
    provider = forms.ModelChoiceField(
     label='Provider', 
     required=False, 
     queryset=Provider.objects.all(), 
     widget=forms.Select(attrs={ 
      'name': 'provider', 
      'class': 'form-control', 
      'id': 'input-invoice-provider', 
     }) 
    ) 

Мне нужно фильтровать объекты, как это:

Provider.objects.filter(user=current_user) 

Как я могу получить подписанную пользователя? Или как я могу получить объект request за пределами представления? Я попытался получить текущего пользователя от __init__ метод формы, а затем установить его на self.user. Но я не могу использовать его в запросе, например self.user.

+0

Пожалуйста, продемонстрируйте код, который вы пробовали. –

+0

@ DanielRoseman Этот ответ: http://stackoverflow.com/a/7300076/4471283 –

ответ

1

Получение пользователя в __init__() является только первой частью решения. Вы также должны использовать этого пользователя для фильтрации запроса:

class InvoiceCreationForm(forms.Form): 
    def __init__(self, *args, **kwargs): 
     self.user = kwargs.pop('user', None) 
     super(InvoiceCreationForm, self).__init__(*args, **kwargs) 
     if self.user: 
      self.fields['provider'].queryset = Provider.objects.filter(user=self.user) 
+0

Он работает, спасибо! :) –

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