django - 查询集中的多个模型和/或一个视图的多个序列化程序?
问题描述
假设我有一个Foo
模型和一个Bar
模型:
# models.py
class Foo(models.Model):
foo_title = CharField()
class Bar(models.Model):
bar_title = CharField()
# serializers.py
class FooSerializer(serializers.ModelSerializer):
class Meta:
model = Foo
fields = ["foo_title"]
class BarSerializer(serializers.ModelSerializer):
foo = FooSerializer()
class Meta:
model = Bar
fields = ["bar_title"]
如果我想返回一个Foo
和一个Bar
模型,我必须设置并调用两个视图:
# urls.py
path("foo/<pk>/", FooView.as_view())
path("bar/<pk>/", BarView.as_view())
# views.py
class FooView(generics.RetrieveAPIView):
serializer_class = FooSerializer
lookup_field = pk
class BarView(generics.RetrieveAPIView):
serializer_class = BarSerializer
lookup_field = pk
然后在我的前端结合这两个数据结果。
是否可以创建一个View
在查询集中具有多个模型和/或多个序列化程序的模型?如何只调用我的 API 后端一次以返回具有不同模型的不同序列化程序的数据?
例如类似的东西
# urls.py
path("foobar/<foo_pk>/<bar_pk>", FoobarView.as_view())
# views.py
class FoobarView(generics.ListAPIView):
pass
解决方案
您可以使用https://github.com/alanjds/drf-nested-routers
pip install drf-nested-routers
这是一个使用示例: https ://github.com/alanjds/drf-nested-routers#infinite-depth-nesting