当前,我的Django应用程序具有数百万条记录,我想基于与ManyToMany
相关的字段值进行更新。
因此,我的工作奏效了,但是花了很多次。为了仅更新三个记录,它使用 13 查询。
Record
模型具有genres
字段的ManyToMany
字段。另外,还有authors
字段,它也是ManyToMany
字段。
最后,Author
模型的ManyToMany
字段表示genres
。
for i in Record.objects.filter(authors__popular=True).only("authors", "genres"):
for a in i.authors.all():
print(a.name) # test purpose
for genre in i.genres.all():
if a.genres.exists():
a.genres.add(genre)
当我运行len(connection.queries)
时,它会显示已运行的查询号,我希望它小于13。
答案 0 :(得分:0)
到目前为止,我只是将查询数量减少到1条记录。这就是我实现的方式
for i in Author.objects.annotate(record_count=Count('record'), record_genres=ArrayAgg('record__genres', distinct=True):
if i.record_count > 0 and i.record_genres:
i.genres.set(i.record_genres)
i.save()