【发布时间】:2019-09-13 11:54:48
【问题描述】:
在我的 Django 应用程序(使用 drf)中,我修改了模型的序列化程序以获取前端所需的输入,但尝试将此序列化程序嵌套在另一个序列化程序中的运气为零。
我尝试使用 to_representation 方法创建模型的一个字段并放置一个 get_photos 方法,但都没有任何意义。
# models.py
class Photo(models.Model):
photo = models.OneToOneField(RawPhoto, related_name='contest_photo', on_delete=models.CASCADE)
thumbnail_size = models.OneToOneField(PhotoSize, related_name='contest_photo', on_delete=models.CASCADE)
thumbnail_url = models.TextField(verbose_name='thumbnail_url')
class Meta:
verbose_name = 'Contest Photo'
@property
def get_photo_src(self):
return settings.MEDIA_URL + self.photo.image.name
@property
def get_thumbnail_url(self):
# dont forget to add cache
if len(self.thumbnail_url) == 0:
file_name = self.get_photo_src
last_dot = file_name.rfind('.')
photo_name, photo_extension = file_name[:last_dot], file_name[last_dot:]
self.thumbnail_url = photo_name + '_' + self.thumbnail_size.name + photo_extension
return self.thumbnail_url
# serializers.py
class PhotoSerializer(serializers.ModelSerializer):
thumbnail_height = serializers.ReadOnlyField(source='thumbnail_size.height')
thumbnail_width = serializers.ReadOnlyField(source='thumbnail_size.width')
src = serializers.ReadOnlyField(source='get_photo_src')
thumbnail_url = serializers.ReadOnlyField(source='get_thumbnail_url')
caption = serializers.ReadOnlyField(source='photo.caption')
class Meta:
model = Photo
fields = ['src', 'thumbnail_url', 'thumbnail_height', 'thumbnail_width', 'caption']
class GallerySerializer(serializers.ModelSerializer):
photos = PhotoSerializer(many=True)
class Meta:
model = Gallery
fields = ['title', 'photos']
PhotoSerializer 实际上返回了我期望的对象的完整描述,但是当我将它嵌套在 GallerySerializer 中时,它只显示 thumbnail_url,这是模型本身中包含的唯一字段。 无论如何我可以在 GallerySerializer 中包含 PhotoSerializer 的字段吗? (应该是照片列表)
谢谢。
【问题讨论】:
-
在
GallerySerializer的class Meta下添加depth=1
标签: django django-rest-framework