Проблема с сериализатором и api

Моя проблема в том, что я хочу получить category.name вместо category.id в api.

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 [Django-doc], который принимает name из Category в качестве данных:

class PostSerializer(serializers.ModelSerializer):
    category = serializers.SlugRelatedField(
        slug_field='name',
        queryset=Category.objects.all()
    )
 
    class Meta:
        model = models.Post
        fields = ['id', 'title', 'content', 'category', 'img', 'date_posted']

Преимуществом этого является то, что это работает двунаправлено: если name категории является unique=True, то это означает, что вы также можете использовать PostSerializer для создания Post и указать name категории в POST запросе.

Вернуться на верх