Проблема с сериализатором и 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 запросе.