【发布时间】:2012-03-16 00:58:15
【问题描述】:
这可能是一个关于数据库的通用问题,而不是 django 问题,但我们走吧。
我经常有可以被视为 2 对多的关系。 例如,我的项目中有一个类 Match,这是两个团队之间的相遇。
起初,我使用的是多对多:
Match(Model):
teams = ManyToManyField('Team', related_name='matches') #Always two teams
它最终对于匹配相关的页面非常低效。特别是在 django 1.3 中,因为对于 many_to_many 关系没有等价于 select_related。当你现在正好有两个元素时,不得不进行迭代有点痛苦。
然后我切换到这个模型:
Match(Model):
teams = ManyToManyField('Team', related_name='matches') #Always two teams
team1 = ForeignKey('Team')
team2 = ForeignKey('Team')
当我想显示比赛相关页面时,我可以使用 select_related 并非常有效地显示两个球队。 当我在团队页面上时,我可以像以前一样按照“比赛”关系获取所有比赛。 但是我发现处理一个关系的 3 个字段是完全可怕的。
我做得对吗?你会推荐什么?
【问题讨论】:
-
你能详细说明你的缓存组织吗?
-
标题中的两个标签,都有不同的分隔符...... ARGH!
-
@jpic 我不明白
标签: django postgresql django-models django-queryset