我正在尝试找到一种在不破坏 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
子类中的所有方法的情况下做到这一点?