在Django-polymorphic中的QuerySet吸气

时间:2015-06-26 21:33:48

标签: django

我想将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。

0 个答案:

没有答案