django 想把序列化得到的全集结果中的user查询到外键的名字,而不是id,怎么编码
时间: 2024-10-18 17:24:05 浏览: 14
在Django中,如果你想在序列化时将外键的ID转换为对应的对象名称,可以使用`SerializerMethodField`来实现。以下是一个示例:
首先,假设你有两个模型 `Author` 和 `Book`,其中 `Book` 有一个外键指向 `Author`:
```python
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
def __str__(self):
return self.title
```
接下来,你可以创建一个自定义的序列化器,将 `author` 字段从 ID 转换为作者的名字:
```python
from rest_framework import serializers
from .models import Author, Book
class BookSerializer(serializers.ModelSerializer):
author_name = serializers.SerializerMethodField()
class Meta:
model = Book
fields = ['id', 'title', 'author', 'author_name']
def get_author_name(self, obj):
return obj.author.name
```
在这个例子中,我们使用了 `SerializerMethodField` 来定义一个名为 `author_name` 的字段,该字段通过 `get_author_name` 方法获取作者的名字而不是 ID。
最后,在你的视图中使用这个序列化器:
```python
from rest_framework import generics
from .models import Book
from .serializers import BookSerializer
class BookListView(generics.ListCreateAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
```
这样,当你序列化 `Book` 对象时,`author` 字段会显示为作者的名字而不是 ID。
阅读全文