我有许多具有相同列名的模型,如下例所示:
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'
)
有可能吗?
如果没有,最简单的方法是什么?
答案 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)
这会使数据库的数量达到你拥有的模型数量的多倍(在这种情况下它是三个)。