Взятие поля из другой модели в сериализаторах
Сейчас я делаю домашний проект о спорте, и у меня есть модель TrainZone и TrainZoneImage, и в сериализаторах мне нужно отобразить поле изображения из модели TrainZoneImage в TrainZoneSerializer
изображения полей должны быть [], где обведено черным
`models.py from django.db import models из ckeditor.fields import 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__'
`
Я попытался взять изображения из TrainZoneImage, сделав TrainZoneImageSerializer и взяв изображения полей в TrainZone Serializer
Проблема с TrainZoneSerializer заключается в том, что images
не является полем модели TrainZone. Когда вы объявили внешний ключ trainzone
в модели TrainZoneImage, вы не указали related_name
. Это означает, что по умолчанию атрибут модели TrainZone, ссылающийся на TrainZoneImage, называется trainzoneimage_set
. Поэтому, если вы замените images
на trainzoneimage_set
в вашем сериализаторе, он должен работать.
Если вы хотите оставить сериализатор прежним, вы можете добавить related_name="images"
к trainzone
ForeignKey, что означает, что images
будет именем атрибута TrainZone, который ссылается на TrainZoneImage, вместо trainzoneimage_set
.