如何在Drf Serilaizer中获得子模型的一行数据

时间:2019-02-08 12:10:55

标签: django django-rest-framework

我有2个模型

class Ad(ActivatorModel, TimeStampedModel):
     ........
class AdImage(models.Model):
    image = models.ImageField(upload_to=get_file_path)
    is_primary = models.BooleanField(default=False)

    ad = models.ForeignKey(Ad, on_delete=models.CASCADE)

我的序列化器是

class MyAdsSerializer(serializers.ModelSerializer):

    class Meta:
        model = ads.models.Ad

如何在上述序列化器中获取广告主图像

1 个答案:

答案 0 :(得分:2)

MyAdsSerializer内添加一个显式的序列化器。

调整AdImage以在ad ForeignKey上有一个明确的related_name

class AdImage(models.Model):
    image = models.ImageField(upload_to=get_file_path)
    is_primary = models.BooleanField(default=False)

    ad = models.ForeignKey(Ad, on_delete=models.CASCADE, related_name='ad_images')
    #                                                    ^^^^^^^^^^^^^^^^^^^^^^^^

更改MyAdsSerializer,使其下方有一个序列化器,然后显式命名字段:

class MyAdsSerializer(serializers.ModelSerializer):
    ad_image__images = serializers.CharField(
        source='ad_images.image', 
        many=True, 
        read_only=True)
    class Meta:
        model = ads.models.Ad
        fields = ('id', 'other_ad_field', 'ad_image__images'