#django-models #django-rest-framework #django-serializer
Вопрос:
В сериализаторе класса я пытаюсь получить сведения о категории, такие как «имя», но следующий код дает мне идентификатор внешнего ключа
models.py
class Category(MP_Node, Timestamps):
name = models.CharField(_('Name'), max_length=255, db_index=True)
class VideoCategory(Category):
image = models.ImageField(upload_to='video_categories', blank=True, null=True, max_length=255)
class VideoCategoryVideo(BaseModel, Timestamps, SoftDelete):
video = models.ForeignKey(Video, on_delete=models.CASCADE)
category = models.ForeignKey(VideoCategory, on_delete=models.CASCADE, null=True)
serializers.py
class VideoCategoryVideoSerializer(serializers.ModelSerializer):
class Meta:
model = VideoCategoryVideo
fields = ('category', )
class VideosDetailsListSerializer(serializers.ModelSerializer):
category = serializers.SerializerMethodField()
class Meta:
model = Video
fields = ('id', 'create_date', 'category')
def get_category(self, data):
cate = VideoCategoryVideo.objects.filter(video=data.id)
category = VideoCategoryVideoSerializer(cate, many=True)
return category.data
результат таков:
"category": [
{
"category": 1
}]
но ожидаемый результат таков
"category": [
{
"name": "cate_name"
}]
Ответ №1:
Вы можете добавить CharField
в VideoCategoryVideoSerializer
и указать source
значение, как это:
class VideoCategoryVideoSerializer(serializers.ModelSerializer):
name = serializers.CharField(source='category.name', read_only=True)
class Meta:
model = VideoCategoryVideo
fields = ('category', 'name')
Это подскажет сериализатору, для чего нужно получить значение name
из соответствующей категории.