在序列化器中从另一个模型获取字段
我现在正在做一个关于体育的个人项目,我有两个模型,一个是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
。