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
有 外键 到 Author
和 Category
。所以每篇文章只有一个作者或类别,你不需要在 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__'
正在尝试序列化我的模型。我希望端点应该显示数据及其相关数据(外键)。
但是我得到一个错误,那就是
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
有 外键 到 Author
和 Category
。所以每篇文章只有一个作者或类别,你不需要在 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__'