首页 > 解决方案 > 查询集中的多个模型和/或一个视图的多个序列化程序?

问题描述

假设我有一个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

标签: djangodjango-rest-framework

解决方案


您可以使用https://github.com/alanjds/drf-nested-routers

pip install drf-nested-routers

这是一个使用示例: https ://github.com/alanjds/drf-nested-routers#infinite-depth-nesting


推荐阅读