If we have model like
class SomeModel(models.Model):
field_1 = models.IntegerField()
field_2 = models.IntegerField()
and in every query for a given value
if we have to check against both the fields, is it possible to simplify the redundancy (field_1=value, field_2=value
) using a custom Manager
?
SomeModel.objects.filter(Q(field_1=value) | Q(field_2=value))
SomeModel.objects.filter(Q(field_1=value) | Q(field_2=value)).count()
Yes, you can make a mananger, like:
class SomeModelManager(models.Manager):
def with_value(self, value):
return self.get_queryset().filter(field_1=value, field_2=value)
or with an or-condition:
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)
We can then add the manager to the SomeModel
model:
class SomeModel(models.Model):
field_1 = models.IntegerField()
field_2 = models.IntegerField()
object = SomeModelManager()
Then you can access the filtered queryset with:
SomeModel.objects.with_value(value)
SomeModel.objects.with_value(value).count()