如何在 Django REST API 中获取用户帖子的用户名而不是数字?

1 django django-rest-framework

我正在尝试通过 REST API 获取 iOS 应用程序的用户名。我可以得到用户号。我如何获得实际用户名?

“作者”应该是用户帖子的用户名。

http://127.0.0.1:8000/api/posts/

结果

HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

[
    {
        "author": 1,
        "title": "Test Title Post",
        "contents": "Test contents post"
  }
Run Code Online (Sandbox Code Playgroud)

模型.py

User = settings.AUTH_USER_MODEL

class PostDetail(models.Model):

    author           = models.ForeignKey(User, on_delete=models.CASCADE, related_name="PostDetail.author+") 
    title            = models.CharField('*Title', max_length=50)
    contents        = models.TextField('*Contents', max_length=450)
Run Code Online (Sandbox Code Playgroud)

序列化程序.py

from rest_framework import serializers
from .models import PostDetail
from django.contrib.auth import get_user_model
from django.contrib.auth.models import User

class PostDetailSerializer(serializers.ModelSerializer):
   class Meta:
       model =PostDetail
       fields = (author, title, 'contents', )
Run Code Online (Sandbox Code Playgroud)

api.py

from rest_framework import viewsets, routers
from blog.models import PostDetail
from blog.serializer import PostDetailSerializer
from django.contrib.auth import get_user_model 
from django.contrib.auth.models import User

class PostViewSet(viewsets.ModelViewSet):
   queryset = PostDetail.objects.all()
   serializer_class = PostDetailSerializer

router = routers.DefaultRouter()
router.register(r'posts', PostViewSet)
Run Code Online (Sandbox Code Playgroud)

我希望 "author": 1, 像 "author": admin,。

dre*_*c4s 5

您需要将您的更改PostDetailSerializer为:

from rest_framework import serializers
from .models import PostDetail
from django.contrib.auth import get_user_model
from django.contrib.auth.models import User

class PostDetailSerializer(serializers.ModelSerializer):

   author = serializers.CharField(source='author.username', read_only=True)

   class Meta:
       model =PostDetail
       fields = (author, title, 'contents', )
Run Code Online (Sandbox Code Playgroud)