【问题标题】:Django custom model managerDjango 自定义模型管理器
【发布时间】:2020-02-04 21:53:47
【问题描述】:

如果我们有类似的模型

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()

【问题讨论】:

  • 鉴于您每次都需要这样做,是否存在field_1field_2 具有不同值的情况?
  • 好收获。不,它们永远不会相同,它的 or 条件而不是 and

标签: django django-models django-managers


【解决方案1】:

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

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 = SomeModelManager()

然后您可以使用以下方式访问过滤后的查询集:

SomeModel.objects.with_value(value)
SomeModel.objects.with_value(value).count()

【讨论】:

  • 知道了。谢谢。
猜你喜欢
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-04
  • 2014-07-11
  • 2013-05-12
  • 2019-06-17
相关资源
最近更新 更多