40P*_*lot 4 django many-to-many model
拥有一个po带有ManyToManyField被叫的模型Order.
我正在考虑一些选项,包括以下解决方案:
po.Orders.all()[0].itemname
Run Code Online (Sandbox Code Playgroud)
但是我不确定这个解决方案是否昂贵(或者不是?)基本上它对整个表的查询然后过滤掉第一个项目.
二解决方案
po.Orders.get(pk=1).itemname
Run Code Online (Sandbox Code Playgroud)
这个似乎更便宜,但不起作用,因为它不可能知道pk前手.
我想知道是否有其他解决方案可以获得与po对象具有ManyToMany关系的任何项目?
.first()是Django Development版本的新功能.请参阅文档:https://docs.djangoproject.com/en/dev/ref/models/querysets/#first
直到它稳定,或者你运行开发版本,坚持你拥有的东西.QuerySet是懒惰的,"应该"采用最少工作的方法.如果您担心,请检查MySql常规日志中的查询日志.
(来自文档)
注意first()是一种方便的方法,下面的代码示例等同于上面的例子:
尝试:
p = Article.objects.order_by('title','pub_date')[0]
除了IndexError:
p = None