您的位置:

处理django出现报错TypeError("Direct assignment to the %s is prohibited. Use %s.set() instead."% self._get_set_deprecation_msg_params(),)

  发布时间:2023-03-02 10:33:50
报错的原因这个错误通常是因为你在尝试直接赋值给 Django 模型的某个字段,而不是使用 `set()` 方法。使用例子这里是一个示例,其中我们定义了一个名为 `Person` 的模型,并使用 `set()` 方法来设置其字段值创建新的 Person 对象使用 set() 方法来更新字段值在这个例子中,我们首先使用 `Person` 模型的构造函数创建了一个新的 `Person` 对象,然后使用 `save()` 方法将其保存到数据库中。然后我们使用 `set()` 方法更新了 `first_name` 字段的值,并再次调用 `save()` 方法将更改保存到数据库中。

报错的原因

这个错误通常是因为你在尝试直接赋值给 Django 模型的某个字段,而不是使用 `set()` 方法。例如:


# 错误的写法
user = User.objects.get(id=1)
user.first_name = 'John'

# 正确的写法
user = User.objects.get(id=1)
user.first_name.set('John')

这个限制是为了防止在调用 `save()` 方法之前就将数据保存到数据库中。通过使用 `set()` 方法来设置字段值,可以确保在调用 `save()` 方法之前所有的更改都能够被检测到。

如何解决

为了解决这个错误,你需要使用 `set()` 方法来设置模型的字段值,而不是直接赋值。例如:


user = User.objects.get(id=1)
user.first_name.set('John')
user.save()

在上面的例子中,我们使用了 `set()` 方法来设置 `first_name` 字段的值,然后调用了 `save()` 方法来将更改保存到数据库中。

如果你想要批量更新模型的字段值,你可以使用 Django 的 `update()` 方法。例如:


User.objects.update(first_name='John')

这个方法会将所有用户的 `first_name` 字段都设置为 'John'。

使用例子

这里是一个示例,其中我们定义了一个名为 `Person` 的模型,并使用 `set()` 方法来设置其字段值:


from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    age = models.PositiveIntegerField()

# 创建新的 Person 对象
person = Person(first_name='John', last_name='Doe', age=30)
person.save()

# 使用 set() 方法来更新字段值
person.first_name.set('Jane')
person.save()

在这个例子中,我们首先使用 `Person` 模型的构造函数创建了一个新的 `Person` 对象,然后使用 `save()` 方法将其保存到数据库中。然后我们使用 `set()` 方法更新了 `first_name` 字段的值,并再次调用 `save()` 方法将更改保存到数据库中。