序列化器和 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]Categoryname 作为数据:

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:如果一个类别的nameunique=True,那么这意味着你也可以使用 PostSerializer 创建一个 Post 并在 POST 请求中指定类别的 name