1
私はカスタムマネージャーの作成について頭を下ろそうとしています。私はオンライン文書が少ししか見つからなかった。次のようなモデルを考えるカスタムモデルマネージャメソッドとQuerySetメソッドの違いは何ですか?
...
class QuestionQuerySet(models.QuerySet):
def QS_first (self):
return self.first()
class QuestionManager(models.Manager):
def get_queryset(self):
return QuestionQuerySet(self.model, using=self._db)
def MN_first(self):
return self.get_queryset().first()
class Question(models.Model):
front = models.ForeignKey('Sentence', related_name='question_fronts')
....
私は、次のような結果を得る...
Grammar.objects.filter(stage=1).question_set.MN_first()
<Question: [<Sentence: eve gideceğim>, <Sentence: I will go home>]>
Grammar.objects.filter(stage=1).question_set.QS_first()
AttributeError: 'RelatedManager' object has no attribute 'QS_first'
しかし
:コードで自分の周りいじる、私は次のようなパターンを発見しましたQuestion.objects.filter(grammar=1).QS_first()
<Question: [<Sentence: eve gideceğim>, <Sentence: I will go home>]>
Question.objects.filter(grammar=1).MN_first()
AttributeError: 'QuestionQuerySet' object has no attribute 'MN_first'
DB関係を介してオブジェクトにアクセスするときにマネージャメソッドが呼び出されるのはなぜですかしかし、Querysetメソッドは、オブジェクトに直接アクセスするときに呼び出されますか? 1つの方法を普遍的なアクセス可能(DRY)にしたい場合は、どのようなソリューションが最適でしょうか?