来自不同模型的 Concat QuerySets

我的模型:


class BaseModel(models.Model):

    my_field = models.CharField(max_length=250)


    class Meta:

        abstract = True



class ModelA(BaseModel):

    a_field = models.CharField(max_length=250)



class ModelB(BaseModel):

    def some_function(self):

        return 'some result'

现在我想对查询集执行过滤,其中查询集由 ModelA.objects.all() 和 ModelB.objects.all() 组成。


我试过:


queryset = chain(ModelA.objects.all(), ModelB.objects.all())

进而:


queryset.filter(my_field='some_string')

但我收到以下错误:


'itertools.chain' object has no attribute 'filter'

如何将这两个模型的 QuerySets 连接成一个并仅基于 BaseModel 字段执行过滤?


慕哥9229398
浏览 144回答 1
1回答

摇曳的蔷薇

为此,您需要使用多表继承并查询 BaseModel 而不是抽象基类BaseModel.objects.filter(my_field='some_string') #returns a queryset of BaseModels或者,有一个名为Django Polymorphic 的第三方包,它在使用上述代码时将返回子类模型而不是超类模型。这似乎使您最接近您正在寻找的解决方案。这是一个非常酷的包!BaseModel.objects.filter(my_field='some_string') #returns a queryset of ModelAs and ModelBs
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python