[英]Django: add additional data in queryset
我有两个型号:
电影
属性 :名称,情节,评级,release_date,照片
导向器
属性 :名称,生物,照片
电影和导演模特有多对多的关系。
现在在我的movies/views.py
文件中:
def movies_index(request):
movies = Movie.objects.all()
for movie in movies:
movie.directors = movie.directors.all() # tried but in the template it gives me error when accessing by movie.directors
# insert directors in every movie object
context_data = {
'movies': movies
}
return render(request, 'movies/index.html', context_data)
我想将导演数据插入到每个电影对象中。 所以结果可能是这样的:
[
{
name: "12 Angry Man",
plot: "bla",
release_date: "1-2132",
directors: [
{
name: "Quentine",
bio: "Lodfs"
},
{
name: "Tarantino",
bio: "Lodsdfs"
}
]
}
]
我怎样才能做到这一点?
或者,有没有不同的方法做到这一点?
NB我正在使用Django 1.9,Python 2.7
是的,有一种不同的方法,不涉及循环和执行N个更多查询以获取相关的控制器对象。
具有与select_related类似的目的,因为两者都旨在阻止由访问相关对象引起的数据库查询泛滥,但策略完全不同。
select_related通过创建SQL连接并在SELECT语句中包含相关对象的字段来工作。 因此,select_related在同一数据库查询中获取相关对象。 但是,为了避免加入“多”关系会产生更大的结果集,select_related仅限于单值关系 - 外键和一对一。
另一方面,prefetch_related对每个关系进行单独查找,并在Python中进行“连接”。 这允许它预取多对多和多对一对象,这是使用select_related无法完成的,
所以
Movie.objects.all().prefetch_related('director')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.