django serializers修改保存时提示save() prohibited to prevent data loss due to unsaved related object 'action'
时间: 2023-11-28 21:47:40 浏览: 197
利用django model save方法对未更改的字段依然进行了保存
这个错误通常是因为你在修改某个模型实例时,其中包含了一个关联对象,但是这个关联对象还没有保存到数据库中。Django 为了避免数据丢失,阻止了直接保存这个模型实例的操作。
解决这个问题的方法是,先保存关联对象,再保存主对象。比如说,假设你要保存一个 `Order` 对象,它有一个外键关联到 `Customer` 模型:
```python
class Customer(models.Model):
name = models.CharField(max_length=100)
class Order(models.Model):
customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
amount = models.DecimalField(max_digits=10, decimal_places=2)
```
如果你要修改一个已经存在的 `Order` 对象,你需要先获取它:
```python
order = Order.objects.get(id=1)
```
然后,你需要先保存它的关联对象 `customer`:
```python
order.customer.name = 'New name'
order.customer.save()
```
最后,你才能保存 `order` 对象本身:
```python
order.amount = 1000
order.save()
```
这样就可以避免出现 `save() prohibited to prevent data loss due to unsaved related object` 的错误了。
阅读全文