QuerySet e Manager personalizados sem interromper o DRY?
Estou tentando encontrar uma maneira de implementar tanto um personalizadoQuerySet
e um costumeManager
sem quebrar seco. Isto é o que eu tenho até agora:
class MyInquiryManager(models.Manager):
def for_user(self, user):
return self.get_query_set().filter(
Q(assigned_to_user=user) |
Q(assigned_to_group__in=user.groups.all())
)
class Inquiry(models.Model):
ts = models.DateTimeField(auto_now_add=True)
status = models.ForeignKey(InquiryStatus)
assigned_to_user = models.ForeignKey(User, blank=True, null=True)
assigned_to_group = models.ForeignKey(Group, blank=True, null=True)
objects = MyInquiryManager()
Isso funciona bem, até eu fazer algo assim:
inquiries = Inquiry.objects.filter(status=some_status)
my_inquiry_count = inquiries.for_user(request.user).count()
Isso interrompe tudo prontamente porque oQuerySet
não tem os mesmos métodos que oManager
. Eu tentei criar um personalizadoQuerySet
classe e implementá-lo emMyInquiryManager
, mas acabo replicando todas as minhas definições de método.
Eu também encontreiesse trecho que funciona, mas preciso passar o argumento extra parafor_user
por isso se decompõe porque depende muito da redefiniçãoget_query_set
.
Existe uma maneira de fazer isso sem redefinir todos os meus métodos nos doisQuerySet
e aManager
subclasses?