Spi*_*der 2 python django django-rest-framework
我有两个模型,一个模型具有另一个模型的外键:
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)
Run Code Online (Sandbox Code Playgroud)
我想根据特定条件获取预订需求,然后序列化为类似以下代码的内容:
{ 'booking1': { 'key1':...
'bookingDemands': {....}
},
'booking2': {...}
}
Run Code Online (Sandbox Code Playgroud)
过滤是这样完成的:
bookings=BookingDemand.objects.filter(booking__post__person=self.request.user)
Run Code Online (Sandbox Code Playgroud)
它返回一个查询集,但我找不到如何序列化它们以分别进行每个预订,如上所述。
创建一个序列化器并设置depth=1如下
from rest_framework import serializers
class BookingDemandSerializer(serializers.ModelSerializer):
class Meta:
model = BookingDemand
fields = '__all__'
depth = 1Run Code Online (Sandbox Code Playgroud)
然后将您的查询集序列化为
bookings = BookingDemand.objects.filter(booking__post__person=self.request.user)
booking_serializer = BookingDemandSerializer(bookings, many=True)
booking_serializer.data # here is the serialized dataRun Code Online (Sandbox Code Playgroud)
更新
# 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2876 次 |
| 最近记录: |