gpt4 book ai didi

django - 自定义模型管理器方法和 QuerySet 方法有什么区别?

转载 作者:行者123 更新时间:2023-12-02 03:01:27 25 4
gpt4 key购买 nike

我正努力着手编写自定义管理器。我发现在线文档有点稀疏。我自己研究代码,发现了以下模式:

给定以下模型...

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关系访问对象时调用Manager方法,而直接访问对象时调用Queryset方法?如果我想要一种普遍可访问的方法 (DRY),最好的解决方案是什么?

最佳答案

看看 QuerySet.as_manager()方法。它允许您从查询集创建管理器,这样您就不需要在自定义管理器和查询集中复制代码,

关于django - 自定义模型管理器方法和 QuerySet 方法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45919248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com