我想将filter_by_user
方法添加到为子多态模型定义的所有QuerySet类中,并在调用基本模型时使用它们来过滤每个模型的对象。对于不同的子模型,filter_by_user
方法可能不同。这可能吗?
我尝试了以下代码,但它没有用。
class MyBaseQuerySet(PolymorphicQuerySet):
def filter_by_user(self, user):
return self.all()
class MyBaseModel(PolymorphicModel):
...
objects = PolymorphicManager(MyBaseQuerySet)
class MyChild1QuerySet(MyBaseQuerySet):
def filter_by_user(self, user):
return self.filter(fieldA__lt=user.profile.propA)
class MyChild1Model(MyBaseModel):
fieldA = models.IntegerField()
...
objects = PolymorphicManager(MyChild1QuerySet)
class MyChild2QuerySet(MyBaseQuerySet):
def filter_by_user(self, user):
return self.filter(fieldB__gt=user.profile.propB)
class MyChild2Model(MyBaseModel):
fieldB = models.IntegerField()
...
objects = PolymorphicManager(MyChild2QuerySet)
当我调用MyBaseModel.objects.filter_by_user(john)
时,魔法不会发生,只会调用基本查询集filter_by_user。