Django Rest API 外键序列化程序错误

Django Rest API foreign key serializers error

正在尝试序列化我的模型。我希望端点应该显示数据及其相关数据(外键)。

但是我得到一个错误,那就是

TypeError: 'Author' object is not iterable

这些是我的序列化器类

from rest_framework import serializers
from . models import Author, Article, Category


class AuthorSerializers(serializers.ModelSerializer):
    class Meta:
        model = Author
        fields = '__all__'

class CategorySerializers(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = '__all__'

class ArticleSerializer(serializers.ModelSerializer):
    author = serializers.StringRelatedField(many=True)
    category = serializers.StringRelatedField(many=True)

    class Meta:
        model =  Article
        fields = '__all__'

这些是我的模型

   from django.db import models
from django.contrib.auth.models import User

class Author(models.Model):
    name = models.ForeignKey(User, on_delete=models.CASCADE)
    detail = models.TextField()

    def __str__(self):
        return self.name.username

class Category(models.Model):
    name = models.CharField(max_length=100)

class Article(models.Model):
    author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='author')
    title = models.CharField(max_length=200)
    body = models.TextField()
    category = models.ForeignKey(Category, on_delete=models.CASCADE)

以下是我的观点:

class ArticleListCreateGet(ListAPIView, CreateAPIView):
    queryset = Article.objects.all()
    serializer_class = ArticleSerializer

class ArticleSingle(RetrieveAPIView):
    queryset = Article.objects.all()
    serializer_class = ArticleSerializer
    lookup_field = 'pk'


# This is delete/update method
class ArticleDeleteUpdate(DestroyAPIView, UpdateAPIView):
    queryset = Article.objects.all()
    serializer_class = ArticleSerializer
    lookup_field = 'pk'

这些是我的 url

path('api/v1/article', views.ArticleListCreateGet.as_view(), name='article'),
    path('api/v1/article/<int:pk>/detail', views.ArticleSingle.as_view(), name='article-single'),
    path('api/v1/article/<int:pk>', views.ArticleDeleteUpdate.as_view(), name='article-delete-update'),

在你的例子中 Article外键 AuthorCategory。所以每篇文章只有一个作者或类别,你不需要在 ArticleSerializer.

中设置 many=True
from rest_framework import serializers
from . models import Article

class ArticleSerializer(serializers.ModelSerializer):
    author = serializers.StringRelatedField()
    category = serializers.StringRelatedField()

    class Meta:
        model =  Article
        fields = '__all__'