Django - 查询所有具有共同字段的模型

时间:2013-04-25 04:49:32

标签: django django-queryset

如果我有很多Django模型 - 都有以下常见字段: -

created_by = models.ForeignKey(User)
modified_by = models.ForeignKey(User)

我希望查询所有模型以找出特定用户创建或修改的对象,是否有理由实现此目的?

或者我是否必须回到ModelA.objects.filter(created_by=userone) ModelB.objects.filter(created_by=userone)等等?

我应该提到的是,实际上这些字段都在一个抽象的基类中,所有其他模型都从这个基类继承它们。但是让我假装我没有告诉你我刚刚告诉你的关于抽象基类的内容,还有办法做我想做的事吗?

2 个答案:

答案 0 :(得分:0)

您必须一次操作一个型号。 Djano ORM管理器在内部使用名为Queyset的类与数据库进行通信,此类QuerySet实例具有model属性,这些属性与单个表同义。因此,他们只能与一个表交谈,尽管可以进行联接操作。但是对于您的场景,您将不得不多次调用db。

orm只是对数据库的抽象,想想你是否可以直接使用sql。

在sql:

select val from test union select val from test2 union......;

所以会有很多工会,因为你说你有很多模型,所以用一个db调用完成这个没什么意义。

答案 1 :(得分:0)

要扩展akshar raaj所说的内容,您可以通过拥有一系列模型来简化代码。

query_models = [ModelA, ModelB, ModelC, ModelD]
for query_model in query_models:
    results = query_model.objects.filter(created_by=userone)
    if len(results) > 0:
        print '%s has it!!!' % query_model.__name__