用parent加载foreignkey模型的最简单的解决方案

时间:2016-01-28 18:40:06

标签: python django

我有一个Django应用程序,我们正在从一堆不同的模型中规范化一些联系人详细信息。也就是说,每次使用这些不同的模型时,这些数据仍会被使用,我想避免一堆n + 1问题。

是否有一个简单的标志或类似的东西,我可以添加到foreignkey字段,或什么?

我唯一的另一个想法是 - 在所有不同的模型管理器上,我覆盖过滤器,获取等方法以自动添加

select_related('contact') 

值。

想法?

1 个答案:

答案 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)