Как получить данные дочерней модели в одну строку в drf serilaizer - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть 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 голосов
/ 08 февраля 2019

Добавить явный сериализатор внутри MyAdsSerializer.

Настройте AdImage, чтобы иметь явное значение related_name на ad ForeignKey:

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'
...