这是一些数据库高尔夫。假设我有一个对象:
class A(models.Model):
b = models.ManyToManyField(B)
#Many other fields
现在假设我想对字段 b 进行批量更新。
some_objects = A.filter(q).values('id','b')
#Populate a map of ids
related_map = {
some_objects[0]['id']: [1,2],
some_objects[1]['id']: [1],
#etc.
}
现在我想做的是这样的:
for (id,related_ids) in related_map.iteritems():
A.filter(id=id).update(b=related_ids)
这会引发 FieldError。当然,我可以这样做
for (id,related_ids) in related_map.iteritems():
a = A.objects.get(id=id)
a.b = related_ids
这行得通,但似乎没有必要。我已经从数据库中提取了我需要的所有数据,以便填充related_map。有没有一种内置的方法可以在不查询数据库的情况下更新多对多?