Как вывести в REST API данные ForeingKey

Как мне вывести информацию о комнатах вместе с Фотографиями Если я щас возьму модель Photo то он покажет только id room и сами фотографии

А как мне сделать так чтобы выводилась вся инфа с модели Rooms

model.py

class Rooms(models.Model):
    room = models.BigIntegerField(verbose_name='Комната')
    category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name='Категория', related_name='wer')
    room_bool = models.BooleanField(verbose_name='Статус', default=True, editable=False)
    price = models.BigIntegerField(verbose_name='Цена', editable=False,null=True)

    def __str__(self):
        return f"{self.room}"

    class Meta:
        verbose_name_plural = 'Номера'
        verbose_name = 'Номер'


class Photo(models.Model):
    room = models.ForeignKey(Rooms, on_delete=models.CASCADE, related_name='dasf', verbose_name="Номер")
    photo = models.FileField(verbose_name='Фотография')

    class Meta:
        verbose_name_plural = 'Фотографии'
        verbose_name = 'Фотографию'

serializers.py

class PhotoSer(serializers.ModelSerializer):

    class Meta:
        model = Photo
        fields = '__all__'

HTTP Запрос

[
    {
        "room": 1,
        "photo": "http://127.0.0.1:8000/backiee-189646.jpg"
    },
    {
        "room": 1,
        "photo": "http://127.0.0.1:8000/backiee-98662_kVz5Ddd.jpg"
    },
    {
        "room": 1,
        "photo": "http://127.0.0.1:8000/backiee-98662_OeCq01T.jpg"
    }
]

serializers.py

class RoomSerializer(serializers.ModelSerializer):
    class Meta:
        model = Rooms
        fields = '__all__'

По дефолту к полю room будет применен тип PrimaryKeyRelatedField

В качестве поля можно указать другой сериализатор, но такой способ будет доступен только для чтения, что бы добавить возможность записи в базу, необходимо будет переопределить метод create в сериализаторе.

class PhotoSerializer(serializers.ModelSerializer):
    room = RoomSerializer(read_only=True, many=True)

    class Meta:
        model = Photo
        fields = ('room', 'photo')

Подробнее про типы полей в доке

Вернуться на верх