如果我有很多Django模型 - 都有以下常见字段: -
created_by = models.ForeignKey(User)
modified_by = models.ForeignKey(User)
我希望查询所有模型以找出特定用户创建或修改的对象,是否有理由实现此目的?
或者我是否必须回到ModelA.objects.filter(created_by=userone)
ModelB.objects.filter(created_by=userone)
等等?
我应该提到的是,实际上这些字段都在一个抽象的基类中,所有其他模型都从这个基类继承它们。但是让我假装我没有告诉你我刚刚告诉你的关于抽象基类的内容,还有办法做我想做的事吗?
答案 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__