django - 在 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
字段,但我想知道我是否缺少一些不那么混乱的方式?
解决方案
代理模型仅用于更改模型的 Python 行为,您不能更改数据库级别的行为(添加字段、更改索引等)。
我不建议在您的项目中为外部应用程序编写迁移,这可能会因为迁移依赖项/订单而变得混乱。
我查看了 Django Comments 的文档,我认为它允许您自定义模型。您可以通过在自定义评论应用程序中扩展抽象模型来添加索引或更改任何您想要的内容。
推荐阅读
- amazon-web-services - 如何使用 AWS CLI 在 s3 存储桶中查找最小文件大小?
- javascript - 如何修复 Uncaught SyntaxError: Invalid or unexpected token
- .net - 在 WPF 项目中找不到正确的应用程序配置文件
- django - 如何使用Django中的相关名称从与第三个表有关系的两个不同表中获取对象?
- google-maps-api-3 - 如何修复 Google Maps API RefererDeniedMapError
- .net - 上传用户照片 microsoft graph api 时出错
- java - 如何检查 Spring-boot 或相关框架的所有合格 bean
- azure - 如何在 Azure AD 中批量创建/导入用户,以便所有人都可以单点登录到我的 SF 沙箱?
- javascript - 赛普拉斯的 before 和 beforeEach 究竟是如何工作的?
- javascript - 如何获得奖励视频以在 cordova-plugin-admob-free 上工作?