微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Django中通过一个查询获取多行?

如何解决在Django中通过一个查询获取多行?

| 我如何构建一个从Django获取多行的QuerySet?我以为filter()可以工作,但情况似乎更糟。 例如,我在CAR模型中有两行,带有两个文本属性(license和vin)。现在说我想从这些汽车上打印许可证和葡萄酒。如何通过一个数据库调用做到这一点? 这是一个将进行两个数据库调用的答案:
#using get(),two total queries
a = Car.objects.get(id=1) #query here
b = Car.objects.get(id=2) #query here
print(a.license + a.vin) #no query
print(b.license + b.vin) #no query
那显然是行不通的,因为我做了两个get()查询。因此,接下来我将尝试filter():
#using filter(),four total queries
c = Car.objects.filter(id__in=(1,2)) #no query
print(c[0].license + c[0].vin) #two queries
print(c[1].license + c[1].vin) #two queries
嗯,那很奇怪,为什么要进行四个数据库调用?有没有一种方法可以使它在一个数据库调用中得到两个?     

解决方法

        由于索引到查询集的工作方式,这似乎很奇怪。
c = list(Car.objects.filter(id__in=(1,2))) # query
print(c[0].license + c[0].vin) #no query
print(c[1].license + c[1].vin) #no query
如果您执行以下操作,那么您也只会有一个查询:
for car in Car.objects.filter(id__in=(1,2)):
    print(car.license + car.vin)
正如@Torsten所说,在您的情况下,您似乎只是在试图获取自己制造的所有汽车。这可以通过
all()
方法来实现:
for car in Car.objects.all():
    print(car.license + car.vin)
    ,        很好的例子。我认为在最后一个代码块中有一个错字。应该:
for car in Car.objects.filter(id__in=(1,2)):
    print(car.license + car.vin)
该方法如何叠加     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。