Например, есть следующие models
и пользовательские QuerySet
:
from django.db import models
class ActiveQuerySet(models.QuerySet):
def active(self):
'''returns only active objects'''
'''supposing here would be a lot
of more complicated code
that would be great to reuse
'''
return self.filter(is_active=True)
class Category(models.Model):
name = models.CharField(max_length=128, blank=True, null=True, default=None)
class Product(models.Model):
name = models.CharField(max_length=128, blank=True, null=True)
is_active = models.BooleanField(default=True)
category = models.ForeignKey(Category, on_delete=models.SET_NULL, related_name='products', related_query_name="product", blank=True, null=True, default=None)
objects = ActiveQuerySet.as_manager()
Не могли бы вы сказать, есть ли способ вызвать метод active()
, например:
category = Category.objects.first()
category.products.active()
вместо того, чтобы делать так:
category.products.filter(is_active=True)
Или как правильно реализовать такое поведение?