【发布时间】:2010-10-30 09:43:01
【问题描述】:
我正在编写一个带有 People 模型的 Django 应用程序,但我遇到了障碍。我正在使用多对多关系将角色对象分配给人们 - 其中角色具有名称和权重。我希望按照最重角色的权重来排列我的人员名单。如果我执行 People.objects.order_by('-roles__weight'),那么当人们分配有多个角色时,我会得到重复。
我最初的想法是添加一个名为 heaviest-role-weight 的非规范化字段 - 并按此排序。然后可以在每次向用户添加或删除新角色时更新此信息。然而,事实证明,每次在 Django 中更新 ManyToManyField 时,都无法执行自定义操作(无论如何,yet)。
所以,我认为我可以完全过火并编写一个自定义字段、描述符和管理器来处理这个问题 - 但是当为 ManyToManyField 动态创建 ManyRelatedManager 时,这似乎非常困难。
我一直在尝试想出一些可以为我做这件事的聪明的 SQL - 我确信可以使用子查询(或几个),但我担心它不兼容所有Django 支持的数据库后端。
以前有没有人这样做过 - 或者对如何实现有任何想法?
【问题讨论】:
标签: sql django database-design django-models