gpt4 book ai didi

django - 如何在链查询中使用自定义管理器?

转载 作者:行者123 更新时间:2023-12-03 22:48:11 25 4
gpt4 key购买 nike

我制作了一个自定义管理器,它必须随机化我的查询:

class RandomManager(models.Manager):

def randomize(self):
count = self.aggregate(count=Count('id'))['count']
random_index = random.randint(0, count - 1)
return self.all()[random_index]

当我首先使用我的经理中定义的方法时,它可以正常工作:
>>> PostPages.random_objects.randomize()
>>> <PostPages: post 3>

我需要随机化已经过滤的查询。当我尝试在链中使用管理器和方法时,出现错误:
PostPages.random_objects.filter(image_gallary__isnull=False).randomize()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
/home/i159/workspace/shivaroot/shivablog/<ipython-input-9-98f654c77896> in <module>()
----> 1 PostPages.random_objects.filter(image_gallary__isnull=False).randomize()

AttributeError: 'QuerySet' object has no attribute 'randomize'

过滤的结果不是模型类的实例,而是 django.db.models.query.QuerySet ,这样它就没有我的经理和方法,分别。
有没有办法在链查询中使用自定义管理器?

最佳答案

这是在自定义管理器上链接自定义方法的方式,即: Post.objects.by_author(user=request.user).published()

from django.db.models.query import QuerySet

class PostMixin(object):
def by_author(self, user):
return self.filter(user=user)

def published(self):
return self.filter(published__lte=datetime.now())

class PostQuerySet(QuerySet, PostMixin):
pass

class PostManager(models.Manager, PostMixin):
def get_query_set(self):
return PostQuerySet(self.model, using=self._db)

链接在这里: django-custom-model-manager-chaining

笔记 :

在 Django 1.7 中,你有这个开箱即用的。退房 QuerySet.as_manager

关于django - 如何在链查询中使用自定义管理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7461038/

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