我有一个模型 A
,它包含一个通用外键关系,并限制选择其他 3 个模型(将它们视为 B
、C
和 D
) 在同一个应用程序中。我知道我们不能使用 filter
或 get
或任何其他查询集操作的通用外键的局限性。
所以要实现这样的功能,A.objects.filter(generic_object__name="foo")
我必须首先过滤 B、C 和 D 的对象作为查询集,迭代它们并使用泛型反向关系以获取 A
对象作为列表(不是查询集)。
我不确定它会如何影响数据库的 SQL 性能,因为查询不是直接的。
PS:我需要使用通用外键,所以请建议任何 SQL 改进而不是重新设计模型。
使用 Django 1.4.3 和 Postgres。
最佳答案
我想引用 David Cramer 的话:Disqus 的开发者,Django 的提交者
Generic relations are fine. They are not slow, just more difficult to manage in your code base.
我看到很多人告诉别人不要使用泛型关系,因为它很慢,但从来没有说它有多慢。
关于Django 通用外键 - 考虑到 SQL 性能是好是坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14333460/