Django - 从许多表中选择相同的列

时间:2015-10-08 20:09:32

标签: python django

我有许多具有相同列名的模型,如下例所示:

class Model1(models.Model):
    name = models.CharField(max_lenght=50)
    other_field = ....

class Model2(models.Model):
    name = models.CharField(max_lenght=50)
    other_different_field = ....

class Model3(models.Model):
    name = models.CharField(max_lenght=50)
    different_field = ....

我需要在一个Django-sintax查询中从这些表(模型)中检索所有名称(name列)。我只有一个过滤器(name__startswith='bla'

有可能吗?

如果没有,最简单的方法是什么?

3 个答案:

答案 0 :(得分:0)

此模型彼此无关,您需要单独查询它们:

Model1.objects.filter(name__startswith='bla')
Model2.objects.filter(name__startswith='bla')
Model3.objects.filter(name__startswith='bla')

答案 1 :(得分:0)

如果你真的需要这个,你可以使用这样的东西:

from django.db.models.loading import get_model

names = []
models = [('core','Model1'), ('core','Model2'), ('core','Model3')]
klasses = [get_model(app, model) for app, model in models]

for klass in klasses:
    for obj in klass.objects.filter(name__startswith='bla'):
        names.append(obj.name)

当然这会不止一次打到数据库 你可以直接指定模型,比如@Shang Wang说:

klasses = [Model1, Model2, Model3]

但如果你需要,更复杂的东西,也许 get_model ,可能会有所帮助。

答案 2 :(得分:0)

这在一个查询中是不必要的,也是不可能的,但是如果你真的想要快速完成它:

...AND (table.date >= :date AND table.date <= :date)

这会使数据库的数量达到你拥有的模型数量的多倍(在这种情况下它是三个)。