2017-12-14 24 views
0

私のdjangoアプリケーションの形でユーザーの製品リストにアクセスしようとしています。djangoアプリケーションのフォーム内に引数がありません

ユーザー情報は、アプリケーションのフォームの入力オプションである必要があります。

私のlist_prodの欄にはどのような議論がありますか?

私は、次のエラーメッセージを受信して​​います:TypeError例外:list_prodを()正確に1つの引数(0が与えられた)

が助けてくださいを取ります!あなたはそのようにそれを行うことはできません

フォーム

class ProductsForm(forms.Form): 
    def __init__(self, *args, **kwargs): 
     self.request = kwargs.pop('request', None) 
     super(ProductsForm, self).__init__(*args, **kwargs) 
    def list_prod(self): 
     user_name = (self.request).user.username 
     u = User.objects.get(username=user_name).accesslevel.prod.split(',') 
     v=(('---------','---------'),) 
     for l in u: 
      v=v+((l.lstrip(),l.lstrip()),) 
    model = Factory 
    Lists = forms.ChoiceField(choices=list_prod()) 

答えて

0

list_prodはインスタンスメソッドであり、インスタンスとともに呼び出される必要がありますが、Listsはクラスレベルの変数です。あなたは__init__の内側にこれを実行する必要があります。ProductsFormとして

class ProductsForm(forms.Form): 
    Lists = forms.ChoiceField(choices=()) 

    def __init__(self, *args, **kwargs): 
     self.request = kwargs.pop('request', None) 
     super(ProductsForm, self).__init__(*args, **kwargs) 
     self.fields['Lists'].choices = self.list_prod() 

も注意してください、それはあなたのmodel宣言は何もしない、プレーンな形ではないのModelFormです。そして、それをModelFormに変更したとしても、その宣言は内部のMetaクラスの内側にある必要があります。

list_prodのロジックの多くは無意味です。 request.userです。既にのユーザーであるため、ユーザーに問い合わせることで再度フェッチする必要はありません。

+0

私はu = User.objects.get(username = user_name).accesslevel.prod.split( '、')の代わりに何を入れるべきですか? –

+0

なぜ 'request.user.accesslevel ...'だけではないのですか? –

関連する問題