Django:更改从QuerySet返回的模型类?
我正在构建一个分析仪表板,我想向我查询的一些对象添加一些仪表板特定的方法。例如,如果我有一本Django:更改从QuerySet返回的模型类?,django,django-models,Django,Django Models,我正在构建一个分析仪表板,我想向我查询的一些对象添加一些仪表板特定的方法。例如,如果我有一本书模型: class Book(m.Model): title = m.CharField() author = m.ForeignKey(User) 我可能想要一个DashboardBook类,它可以总结查看该书的用户: class DashboardBook(Book): @classmethod def query(cls): return cls.
书
模型:
class Book(m.Model):
title = m.CharField()
author = m.ForeignKey(User)
我可能想要一个DashboardBook
类,它可以总结查看该书的用户:
class DashboardBook(Book):
@classmethod
def query(cls):
return cls.objects.extra(select={"_raw_recent_views": "SELECT ARRAY(…)"})
@property
def recent_views(self):
return DashboardBookViews(self._raw_recent_views)
我有没有办法理智地做到这一点
我试过这个:
class DashboardBook(Book):
class Meta:
managed = False
abstract = True
db_table = 'books_book'
@classmethod
def query(cls):
query = cls.objects.all().select_related('user')
query.model = cls
return query
但是一些非常令人惊讶的事情发生了,比如书的标题
字段被用户的散列密码替换
请注意:我特别想了解如何使用查询集
,因为如果我可以将这些查询集
传递给周围的人(例如,传递给分页器
),这将非常方便。我知道有很多方法可以包装QuerySet
(例如,[Book.objects.all()]中b的仪表盘(b)
),但这很快就会变得很粗糙。您想要代理模型:
此外,与使用类方法相比,使用自定义ModelManager实现特定于模型的查询效果更好。啊,是的,这正是我想要的。谢谢(是的,
@classmethod
只是为了简化问题)