'QuerySet' 对象在 "bulk_update" 中没有属性 'pk'
'QuerySet' object has no attribute 'pk' in "bulk_update"
我有教授模型,需要“bulk_update”。我必须在我的数据库的 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'])]
我的代码
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'])
你能给我一些建议吗?
你的 prof
是 Professor
的 QuerySet
,而不是单个 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]
<strong>profs</strong> = {<strong>p.id</strong>: p for p in Professor.objects.filter(id__in=prof_id)}
tmp = []
for prof_id, new_first_name in first_name_updates:
prof = <strong>profs[prof_id]</strong>
prof.first_name = new_first_name
tmp.append(<strong>prof</strong>)
Professor.objects.bulk_update(tmp, ['first_name'])
我有教授模型,需要“bulk_update”。我必须在我的数据库的 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'])]
我的代码
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'])
你能给我一些建议吗?
你的 prof
是 Professor
的 QuerySet
,而不是单个 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]
<strong>profs</strong> = {<strong>p.id</strong>: p for p in Professor.objects.filter(id__in=prof_id)}
tmp = []
for prof_id, new_first_name in first_name_updates:
prof = <strong>profs[prof_id]</strong>
prof.first_name = new_first_name
tmp.append(<strong>prof</strong>)
Professor.objects.bulk_update(tmp, ['first_name'])