首页 > 解决方案 > 在 Django 中,如何在代理模型的原始模型上索引字段?

问题描述

我有一个模型是基于Django 评论 Comment模型的代理模型:

from django_comments.models import Comment

class Annotation(Comment):

    # ...

    class Meta:
        proxy = True

Comment模型有一个TextField()调用comment,我想在其中添加一个GinIndex以加快使用 Postgresql 的全文搜索。

但是,我无法在Annotation'sMeta类中的该字段上添加索引,因为我收到此错误:

annotations.Annotation:(models.E016)'indexes' 指的是字段'comment',它不是模型'Annotation' 的本地字段。
提示:这个问题可能是由多表继承引起的。

而且我不能为字段定义本身添加索引,因为它在django_comments'Comment模型中。

我可以编写一个迁移以使用 SQL 手动将索引添加到django_comments.models.Comment'scomment字段,但我想知道我是否缺少一些不那么混乱的方式?

标签: django

解决方案


代理模型仅用于更改模型的 Python 行为,您不能更改数据库级别的行为(添加字段、更改索引等)。

我不建议在您的项目中为外部应用程序编写迁移,这可能会因为迁移依赖项/订单而变得混乱。

我查看了 Django Comments 的文档,我认为它允许您自定义模型。您可以通过在自定义评论应用程序中扩展抽象模型来添加索引或更改任何您想要的内容。


推荐阅读