我是Python / Django / DRF的新手。我不确定如何处理以下情况:
我有以下3种模型:Article
,Image
,ImageEntryItem
,如何使ArticleSerializer使用ImageSerializer?
class Article(models.Model):
headline = models.CharField(_('headline'), max_length=255, db_index=True)
body = models.TextField(blank=True, null=True)
class ImageEntryItem(models.Model):
image = models.ForeignKey(Image)
entry = models.ForeignKey(Article, related_name='imageentryitems')
order = models.IntegerField(null=True, blank=True)
class Image(models.Model):
exif = models.TextField(null=True, blank=True)
def get_image_url(self):
# return image url
这是我当前的文章序列化程序:
class ArticleSerializer(serializers.ModelSerializer):
first_image = serializers.SerializerMethodField()
class Meta:
model = Article
fields=('headline', 'body', 'first_image')
def get_first_image(self, article):
first_image = article.imageentryitems.all()[0].image
image_url = first_image.get_image_url()
exif = first_image.exif
return {
image_url: image_url,
exif: exif
}
我可以做一些事情来使用像http://www.django-rest-framework.org/api-guide/relations/#nested-relationships这样的ImageSerializer吗?我不确定在此如何操作,因为Aritcle与Image没有直接关系,如何在ImageSerialzier
上使用article.imageentryitems.all()[0].image
?
class ArticleSerializer(serializers.ModelSerializer):
first_image = ImageSerializer(read_only=True)
答案 0 :(得分:2)
将 ImageSerializer
中的source
[DRF-Doc]参数用作
class ArticleSerializer(serializers.ModelSerializer):
first_image = ImageSerializer(read_only=True, source='imageentryitems', many=True)
将您的 get_first_image()
方法更改为
class ArticleSerializer(serializers.ModelSerializer):
first_image = serializers.SerializerMethodField()
class Meta:
model = Article
fields = ('headline', 'body', 'first_image')
def get_first_image(self, article):
return ImageSerializer(article.imageentryitems, many=True).data