我有一个Django应用程序,我们正在从一堆不同的模型中规范化一些联系人详细信息。也就是说,每次使用这些不同的模型时,这些数据仍会被使用,我想避免一堆n + 1问题。
是否有一个简单的标志或类似的东西,我可以添加到foreignkey字段,或什么?
我唯一的另一个想法是 - 在所有不同的模型管理器上,我覆盖过滤器,获取等方法以自动添加
select_related('contact')
值。
想法?
答案 0 :(得分:0)
我最终决定覆盖get和filter方法来处理select_related。关于旧的Django版本有一些旧讨论,但截至目前(1.8),您可以多次调用select_related并且框架正确处理重复项。
以下是覆盖:
def get(self, **kwargs):
"""
overwriting get to always include the contact information
"""
return super(ParentRecordManager, self).select_related(
'contact'
).get(**kwargs)
def filter(self, **kwargs):
"""
overwriting filter to always include contact in the filter
:param kwargs:
:return:
"""
return super(ParentRecordManager, self).select_related(
'contact'
).filter(**kwargs)