我有教授的模型,需要“批量更新”。我必须在数据库的 2 个请求中完成此操作。
但我有例外(“QuerySet”对象没有属性“pk”)。如果我使用 get 我有另一个异常(get() 返回了不止一位教授)。
我的模特。
class Professor(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
age = models.IntegerField(default=18)
class Meta:
indexes = [models.Index(fields=['first_name'])]
My code
def update_professor_first_names(first_name_updates: List[NameUpdate]):
prof_id = [id for id, name in first_name_updates]
prof = Professor.objects.filter(id__in=prof_id)
tmp = []
for prof_id, new_first_name in first_name_updates:
prof.first_name = new_first_name
tmp.append(prof)
Professor.objects.bulk_update(tmp, ['first_name'])
你能给我一些建议吗?
Your prof
is a QuerySet
of Professor
s,没有一个Professor
,因此这样写是没有意义的prof.first_name = new_first_name
,这也会导致tmp
成为一个list一样的QuerySet
重复多次。
你应该查一下Professor
对象,并相应地分配它,所以:
def update_professor_first_names(first_name_updates: List[NameUpdate]):
prof_id = [id for id, name in first_name_updates]
profs = {p.id: p for p in Professor.objects.filter(id__in=prof_id)}
tmp = []
for prof_id, new_first_name in first_name_updates:
prof = profs[prof_id]
prof.first_name = new_first_name
tmp.append(prof)
Professor.objects.bulk_update(tmp, ['first_name'])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)