Как сериализовать результат objects.filter django на основе объекта внешнего ключа - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть две модели, одна с внешним ключом для другой:

class Booking(models.Model):

type_course_requested = models.ManyToManyField(TypePost, blank=True)
    .....
    #Presentation Message

    message = models.CharField(max_length=1000)

class BookingDemand(models.Model):

    booking = models.ForeignKey(Booking, on_delete=models.CASCADE, null=True, blank=True)

Я хочу получить требования бронирования на основе определенного условия, а затем сериализовать, чтобы получить что-то вроде кода ниже:

{ 'booking1': { 'key1':...
               'bookingDemands': {....}
             }, 
  'booking2': {...}
}

Фильтрация выполняется следующим образом:

bookings=BookingDemand.objects.filter(booking__post__person=self.request.user)

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

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Создайте сериализатор и установите depth=1, как показано ниже

from rest_framework import serializers


class BookingDemandSerializer(serializers.ModelSerializer):
    class Meta:
        model = BookingDemand
        fields = '__all__'
        depth = 1

, затем сериализуйте ваш набор запросов как

bookings = BookingDemand.objects.filter(booking__post__person=self.request.user)
booking_serializer = BookingDemandSerializer(bookings, many=True)
booking_serializer.data  # here is the serialized data

ОБНОВЛЕНИЕ

# serializer.py
from rest_framework import serializers


class BookingDemandSerializer(serializers.ModelSerializer):
    class Meta:
        model = BookingDemand
        fields = '__all__'


class BookingSerializer(serializers.ModelSerializer):
    booking_demands = BookingDemandSerializer(source='bookingdemand_set', many=True)

    class Meta:
        model = Booking
        fields = '__all__'


# serialization process
queryset = Booking.objects.all()  # apply filter if you want
serializer = BookingSerializer(queryset, many=True)
serializer.data # here is the data
0 голосов
/ 18 сентября 2018

Создайте два сериализатора BookingSerializer и BookingDemandSerializer и добавьте

booking(related_name) = BookingDemandSerializer(many=True) in BookingSerializer
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...