'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'])

你能给我一些建议吗?

你的 profProfessorQuerySet,而不是单个 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'])