【发布时间】:2019-02-14 18:29:12
【问题描述】:
想象一下 Django 中的此类模型:
class Organisation(Model):
...
class Guest(Model):
organisation = ForeignKey(Guest, CASCADE, 'guests')
class Booking(Model):
guest = ForeignKey(Guest, CASCADE, 'bookings')
start_date = DateField()
end_date = DateField()
使用 Django Rest Framework 需要执行一个端点
- 要列出的所有组织
- 要列出的所有客人
- 要再次过滤 start_date 并列出的预订
响应示例:
"Organizations": [
{
...,
"Guests": [
{
...,
"Bookings": [
{...},
{...}
]
},
{
...,
"Bookings": [
]
}
]
},
{
...,
"Guests": [
{
...,
"Bookings": [
{...},
]
},
]
}
]
因此,如您所见,我需要所有组织和客人都在场,而不仅仅是那些有预订的人。
执行此操作的最佳方法是什么?
更新:
使用的序列化器:
class BookingShortSerializer(serializers.ModelSerializer):
class Meta:
model = Booking
fields = (
'pk',
'start_date',
'guest',
)
class GuestBookingsSerializer(serializers.ModelSerializer):
bookings = BookingShortSerializer(many=True)
class Meta:
model = Guest
fields = (
'pk',
'name',
'bookings',
)
class OrganizationShortSerializer(serializers.ModelSerializer):
guests = GuestBookingsSerializer(many=True)
class Meta:
model = Organization
fields = (
'pk',
'public_name',
'internal_name',
'guests',
'order',
)
使用的视图集(现在没有过滤):
class OrganizationBookingsViewSet(mixins.ListModelMixin, GenericViewSet):
ordering = 'order'
serializer_class = OrganizationShortSerializer
permission_classes = (AllowAny,)
def get_queryset(self) -> QuerySet:
return Organization.objects.all()
【问题讨论】:
-
可以添加序列化器和视图类吗?
-
添加了序列化程序和视图集
-
如果你不过滤
Organization QuerySet,你会得到预期的结果 -
我不需要过滤Organization,而是过滤嵌套在其中的Booking
标签: django django-models django-rest-framework django-filter