django serializers 增加update方法,更改所有字段时,字段中含有外键如何处理,请举个例子
时间: 2023-11-11 14:06:42 浏览: 101
当使用 Django 的 serializers 模块进行更新操作时,如果字段中含有外键,我们需要传递外键对应的对象的 ID 值,以便能够正确地更新关联对象。
下面是一个简单的例子:
假设我们有两个模型,一个是 `Author` 模型,另一个是 `Book` 模型,`Book` 模型中有一个外键字段 `author`,它关联到 `Author` 模型的 `id` 字段。
```python
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
```
我们现在要更新一本书的作者信息,假设书的 ID 是 1,新的作者 ID 是 2,那么我们可以这样写:
```python
from django.shortcuts import get_object_or_404
from rest_framework import serializers
from .models import Book, Author
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = '__all__'
def update(self, instance, validated_data):
author_id = validated_data.pop('author')
author = get_object_or_404(Author, pk=author_id)
instance.author = author
for key, value in validated_data.items():
setattr(instance, key, value)
instance.save()
return instance
```
在上面的代码中,我们首先使用 `get_object_or_404` 方法获取新的作者对象,然后将其设置为书对象的 `author` 属性。接着,我们使用 `setattr` 方法将其它字段的值设置为传递过来的值,最后调用 `save` 方法保存更新后的对象。
这样,我们就能够正确地更新带有外键的字段了。
阅读全文