2016-10-30 7 views
0

私は、フォームで請求書プロバイダを選択するためにModelChoiceFieldを使用しています。現在のケースでは、すべてのプロバイダをクエリーセットに戻しています。forms.pyで現在署名されているユーザーを取得するには?

しかし、私は署名されたユーザーによって作成されたプロバイダのみを返すべきです。プロバイダーにはuserという名前のForeignKeyフィールドがあります。ここで

は私のフォームです:

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/44712​​83 –

答えて

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

それは、ありがとう! :) –

関連する問題