DRY Django查询集

时间:2016-06-06 14:04:17

标签: python django

我有一个查询,用户在数据库中的多个聚合字段上订购了if_by,如下所示:

list = MyList.objects.filter(key_item=None).extra(
        select={"diff":"abs(field1+field2+field3+field4+field5+field6+field7+field8+field9+field10)"}).order_by('-diff')

我使用它是我的代码中的几个地方,我宁愿在某个集中的地方使用它。

我想知道django重用这个的最好方法。

1 个答案:

答案 0 :(得分:4)

您可以将管理器添加到模型类中,以将其作为基础过滤器包含在内。 例如:

class MyListManager(models.Manager):
    def select_diff(self):
        return self.get_queryset().extra(...)


class MyList(models.Model):
    objects = MyListManager()

有了这个你就可以做到:

MyList.objects.select_diff().filter(...)

您可以找到有关经理here

的更多信息

将查询集写入某处的一个很大的优点是,您仍然可以使用其他过滤器/参数链接查询集,并且符合django标准