Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django多态基因中的QuerySet遗传_Django - Fatal编程技术网

django多态基因中的QuerySet遗传

django多态基因中的QuerySet遗传,django,Django,我想将filter\u by_user方法添加到为子多态模型定义的所有QuerySet类中,并在为基础模型调用时使用它们来过滤每个模型的对象按用户筛选方法对于不同的子模型可能不同。这可能吗 我尝试了以下代码,但没有成功 class MyBaseQuerySet(PolymorphicQuerySet): def filter_by_user(self, user): return self.all() class MyBaseModel(PolymorphicMode

我想将
filter\u by_user
方法添加到为子多态模型定义的所有QuerySet类中,并在为基础模型调用时使用它们来过滤每个模型的对象<代码>按用户筛选方法对于不同的子模型可能不同。这可能吗

我尝试了以下代码,但没有成功

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\u by\u user(john)
magic不会发生,只有base queryset filter\u by\u user被调用。

多态性管理器是否实例化传递给它的
queryset
或者它的确切用途是什么?@LawrenceBenson我猜它使多态性过滤工作起来了。我是从文档中获取的:我不太确定我是否理解您的期望
MyBaseModel
参考
MyBaseQuerySet
。当您调用
MyBaseModel.objects.filter\u by\u user(john)
时,您将得到
return self.all()
。您没有指定如何处理该名称input@LawrenceBenson我在MyChild1QuerySet&MyChild2QuerySet中指定如何处理它,并期望调用相应的方法。但是,您希望Django如何知道调用哪一个方法呢?我希望它能像任何正常的多态性一样工作。如果调用
MyChild2QuerySet
您应该得到
返回self.filter(fieldB\uu gt=user.profile.propB)
。如果不是由该类实现的,那么您将始终获得从或更高级别调用它的类的函数