从序列化器中的另一个模型获取字段

问题描述 投票:0回答:1

现在我正在做一个关于运动的宠物项目,我有一个 TrainZone 和 TrainZoneImage 模型,在序列化器中我需要在 TrainZoneSerializer 中显示来自 TrainZoneImage 模型的图像字段

现场图像应为[enter image description here]黑色圆圈内

`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 获取图像

python python-3.x django django-rest-framework
1个回答
0
投票

TrainZoneSerializer 的问题是

images
不是 TrainZone 模型上的字段。当您在 TrainZoneImage 模型上声明
trainzone
外键时,您没有指定
related_name
。这意味着默认情况下,TrainZone 模型上引用 TrainZoneImage 的属性称为
trainzoneimage_set
。因此,如果您在序列化器中将
images
替换为
trainzoneimage_set
,它应该可以工作。

如果您想保持序列化器相同,您也可以将

related_name="images"
添加到
trainzone
外键,这意味着
images
将是 TrainZone 上引用 TrainZoneImage 的属性名称,而不是
trainzoneimage_set

© www.soinside.com 2019 - 2024. All rights reserved.