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
只是为了简化问题)