序列化器和 api 问题
Issue with serializer and api
我的问题是我想在 api 中获取 category.name 而不是 category.id。
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = models.Post
fields = ['id', 'title', 'content', 'category', 'img', 'date_posted']
但是当我添加它时,POST 方法中设置类别的选项消失了。对于 api 视图,我使用
generics.ListCreateAPIView
def getCategory(self,obj):
return obj.category.name
category = serializers.SerializerMethodField("getCategory")
您可以通过以下方式进行
class PostSerializer(serializers.ModelSerializer):
category_name = serializer.SerializerMethodField()
class Meta:
model = models.Post
fields = ['id', 'title', 'content', 'category', 'img',
'date_posted','category_name ']
def get_category_name(self,obj):
return obj.category.name
您可以使用 SlugRelatedField
[drf-doc] 将 Category
的 name
作为数据:
class PostSerializer(serializers.ModelSerializer):
category = serializers.<strong>SlugRelatedField(</strong>
<strong>slug_field='name'</strong>,
queryset=Category.objects.all()
<strong>)</strong>
class Meta:
model = models.Post
fields = ['id', 'title', 'content', 'category', 'img', 'date_posted']
这样做的好处是这样有效bi-directional:如果一个类别的name
是unique=True
,那么这意味着你也可以使用 PostSerializer
创建一个 Post
并在 POST 请求中指定类别的 name
。
我的问题是我想在 api 中获取 category.name 而不是 category.id。
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = models.Post
fields = ['id', 'title', 'content', 'category', 'img', 'date_posted']
但是当我添加它时,POST 方法中设置类别的选项消失了。对于 api 视图,我使用
generics.ListCreateAPIView
def getCategory(self,obj):
return obj.category.name
category = serializers.SerializerMethodField("getCategory")
您可以通过以下方式进行
class PostSerializer(serializers.ModelSerializer):
category_name = serializer.SerializerMethodField()
class Meta:
model = models.Post
fields = ['id', 'title', 'content', 'category', 'img',
'date_posted','category_name ']
def get_category_name(self,obj):
return obj.category.name
您可以使用 SlugRelatedField
[drf-doc] 将 Category
的 name
作为数据:
class PostSerializer(serializers.ModelSerializer):
category = serializers.<strong>SlugRelatedField(</strong>
<strong>slug_field='name'</strong>,
queryset=Category.objects.all()
<strong>)</strong>
class Meta:
model = models.Post
fields = ['id', 'title', 'content', 'category', 'img', 'date_posted']
这样做的好处是这样有效bi-directional:如果一个类别的name
是unique=True
,那么这意味着你也可以使用 PostSerializer
创建一个 Post
并在 POST 请求中指定类别的 name
。