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

0 投票
1 回答
21 浏览
提问于 2025-04-12 10:08

我现在正在做一个关于体育的个人项目,我有两个模型,一个是TrainZone(训练区域),另一个是TrainZoneImage(训练区域图片)。在序列化器中,我需要把TrainZoneImage模型里的图片字段显示在TrainZoneSerializer里。

图片字段应该是这样的:[在这里输入图片描述],黑色圈起来的部分就是。

`models.py 来自django.db的模型 来自ckeditor.fields的富文本字段

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来从TrainZoneImage中获取图片,然后在TrainZoneSerializer中获取这些图片字段。

1 个回答

0

TrainZoneSerializer的问题在于,images并不是TrainZone模型中的一个字段。当你在TrainZoneImage模型中声明trainzone这个外键时,没有指定related_name。这就意味着,默认情况下,TrainZone模型中指向TrainZoneImage的属性叫做trainzoneimage_set。所以,如果你把images换成trainzoneimage_set,你的序列化器就能正常工作了。

如果你想保持序列化器不变,你可以在trainzone的外键上加上related_name="images"。这样的话,images就会成为TrainZone中指向TrainZoneImage的属性名称,而不是trainzoneimage_set

撰写回答