2017-02-20 5 views
3

要件の1つとして、カスタムクエリーセットのUpdateメソッドをオーバーライドしています。DjangoクエリーセットのUpdateメソッドのオーバーライド

サンプルコードは次のとおりです。

from django.db.models.query import QuerySet 

class PollQuerySet(QuerySet): 
    def update(self, *args, **kwargs): 
     # Some Business Logic 

     # Call super to continue the flow -- from below line we are unable to invoke super 
     super(self, kwargs) 

class Question(models.Model): 
    objects = PollQuerySet.as_manager() 

    question_text = models.CharField(max_length=200) 
    pub_date = models.DateTimeField('date published') 

カスタムクエリーセットからベースクエリーセットで更新を呼び出すことができません。

はTypeErrorポーリング/時/ はどれ溶液がはるかに高く評価されて

をPollQuerySetない、タイプでなければなりません。

答えて

3

あなたの質問が正しく理解されていれば、スーパークラスの更新メソッドを呼び出すことができません。あなたがそれを間違って呼んでいるからです。次のようになります。

super(PollQuerySet,self).update(*args, **kwargs) 

python 3.xの場合、クラス名と自己はオプションのパラメータになります。したがって、上記の行は、

super().update(*args, **kwargs) 
+0

に短縮することができます。これは、python3のように 'super()。update(* args、** kwargs) 'というタグがついています。 :) – danielcorreia

+0

申し訳ありませんが、それを指摘してくれてありがとう – e4c5

関連する問題