现在我正在做一个关于运动的宠物项目,我有一个 TrainZone 和 TrainZoneImage 模型,在序列化器中我需要在 TrainZoneSerializer 中显示来自 TrainZoneImage 模型的图像字段
现场图像应为[]黑色圆圈内
`models.py 从 django.db 导入模型 从 ckeditor.fields 导入 RichTextField
class TrainZone(models.Model):
title = models.CharField(max_length=100, verbose_name='Название')
description = RichTextField(verbose_name='Описание')
def __str__(self):
return self.title
class Meta:
verbose_name = 'Тренировочная зона',
verbose_name_plural = 'Тренировочные зоны'
class TrainZoneImage(models.Model):
trainzone= models.ForeignKey(TrainZone, default=None, on_delete=models.CASCADE)
images = models.FileField(upload_to='media/')
def __str__(self):
return self.trainzone.title`
`
serializers.py
from rest_framework import serializers
from .models import TrainZone, TrainZoneImage
class TrainZoneImageSerializer(serializers.ModelSerializer):
class Meta:
model = TrainZoneImage
fields = ('id', 'images') # Измените поля по необходимости
class TrainZoneSerializer(serializers.ModelSerializer):
images = TrainZoneImageSerializer(many=True, read_only=True)
class Meta:
model = TrainZone
fields = ('id', 'title', 'description', 'images')
class TrainZoneValidatorSerializer(serializers.ModelSerializer):
class Meta:
model = TrainZone
fields = '__all__'
`
我尝试通过制作 TrainZoneImageSerializer 并在 TrainZone Serializer 中获取现场图像来从 TrainZoneImage 获取图像
TrainZoneSerializer 的问题是
images
不是 TrainZone 模型上的字段。当您在 TrainZoneImage 模型上声明 trainzone
外键时,您没有指定 related_name
。这意味着默认情况下,TrainZone 模型上引用 TrainZoneImage 的属性称为 trainzoneimage_set
。因此,如果您在序列化器中将 images
替换为 trainzoneimage_set
,它应该可以工作。
如果您想保持序列化器相同,您也可以将
related_name="images"
添加到 trainzone
外键,这意味着 images
将是 TrainZone 上引用 TrainZoneImage 的属性名称,而不是 trainzoneimage_set
。