Django менеджер пользовательских моделей - PullRequest
1 голос
/ 05 февраля 2020

Если у нас есть модель, подобная

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

и в каждом запросе для данного value, если мы должны сверяться с обоими полями, можно ли упростить избыточность (field_1=value, field_2=value), используя Кастом Manager?

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

1 Ответ

1 голос
/ 05 февраля 2020

Да , вы можете создать менеджер, например:

class SomeModelManager(models.Manager):

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

или с условием или:

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