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()
1 Answer 1
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()
answered Feb 4, 2020 at 21:59
willeM_ Van Onsem
482k33 gold badges484 silver badges624 bronze badges
Sign up to request clarification or add additional context in comments.
Comments
Explore related questions
See similar questions with these tags.
default
field_1andfield_2have a different value?orcondition instead ofand.