DRYを壊さずにカスタムQuerySet
とカスタムの両方を実装する方法を見つけようとしています。Manager
これは私がこれまでに持っているものです:
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()
私がこのようなことをするまで、これはうまくいきます:
inquiries = Inquiry.objects.filter(status=some_status)
my_inquiry_count = inquiries.for_user(request.user).count()
QuerySet
はと同じメソッドを持っていないため、これはすぐにすべてを壊しますManager
。カスタムQuerySet
クラスを作成してで実装しようとしましたMyInquiryManager
が、すべてのメソッド定義を複製することになります。
このスニペットも機能することがわかりましたがfor_user
、再定義に大きく依存しているため、追加の引数を渡す必要がありget_query_set
ます。
QuerySet
とManager
サブクラスの両方ですべてのメソッドを再定義せずにこれを行う方法はありますか?