Django 自定义模型管理器

Django custom model manager

如果我们有这样的模型

class SomeModel(models.Model):
    field_1 = models.IntegerField()
    field_2 = models.IntegerField()

并且在给定 value 的每个查询中,如果我们必须检查这两个字段,是否可以使用自定义 Manager 来简化冗余 (field_1=value, field_2=value)?

SomeModel.objects.filter(Q(field_1=value) | Q(field_2=value))
SomeModel.objects.filter(Q(field_1=value) | Q(field_2=value)).count()

是的,你可以做一个mananger,比如:

class SomeModelManager(models.Manager):

    def with_value(self, value):
        return self.get_queryset().filter(field_1=value, field_2=value)

或使用 or 条件:

from django.db.models import Q

class SomeModelManager(models.Manager):

    def with_value(self, value):
        return self.get_queryset().filter(Q(field_1=value) | Q(field_2=value)

然后我们可以将经理添加到 SomeModel 模型:

class SomeModel(models.Model):
    field_1 = models.IntegerField()
    field_2 = models.IntegerField()

    object = <b>SomeModelManager()</b>

然后您可以访问过滤后的查询集:

SomeModel.objects<b>.with_value(value)</b>
SomeModel.objects<b>.with_value(value)</b>.count()