Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在django rest框架中的单个api调用中从两个不同的模型获取数据?有可能吗?如果有,怎么可能?_Python_Django_Django Models_Django Rest Framework - Fatal编程技术网

Python 如何在django rest框架中的单个api调用中从两个不同的模型获取数据?有可能吗?如果有,怎么可能?

Python 如何在django rest框架中的单个api调用中从两个不同的模型获取数据?有可能吗?如果有,怎么可能?,python,django,django-models,django-rest-framework,Python,Django,Django Models,Django Rest Framework,我在Django rest框架中从单个视图获取两个模型的数据时遇到了问题。这是我到目前为止所做的,但我不确定如何使用单视图从两个模型中获取数据 urlpatterns = [ path('users/<int:id>/', GenericAPIView.as_view()), path('users/', GenericAPIView.as_view()), ] 这是我的观点 class GenericAPIView(generics.GenericAPIVi

我在Django rest框架中从单个视图获取两个模型的数据时遇到了问题。这是我到目前为止所做的,但我不确定如何使用单视图从两个模型中获取数据

urlpatterns = [

    path('users/<int:id>/', GenericAPIView.as_view()),
    path('users/', GenericAPIView.as_view()),

]
这是我的观点


class GenericAPIView(generics.GenericAPIView, mixins.ListModelMixin, mixins.CreateModelMixin, mixins.RetrieveModelMixin,
                     mixins.UpdateModelMixin):
    serializer_class = userdataSerializer, userSerializer
    queryset = UserData.objects.all()

    lookup_field = 'id'



    def get(self, request, id=None):
        if id:
            return self.retrieve(request)
        else:
            return self.list(request)

    def post(self, request):

        return self.create(request)

    def put(self, request, id=None):
        return self.update(request, id)

您可以修改其中一个序列化程序以包含另一个序列化程序

class userSerializer(serializers.ModelSerializer):
    user_data = userdataSerializer()
    class Meta:
        model = User
        fields = ('field1', 'field2', 'user_data', ...)

您可以修改其中一个序列化程序以包含另一个序列化程序

class userSerializer(serializers.ModelSerializer):
    user_data = userdataSerializer()
    class Meta:
        model = User
        fields = ('field1', 'field2', 'user_data', ...)
我正在清除的答案(不能评论,没有足够的声誉)。我想你应该用这个概念。从文档中:

类TrackSerializer(serializers.ModelSerializer):
类元:
模型=轨道
字段=[“顺序”、“标题”、“持续时间”]
类序列化程序(serializers.ModelSerializer):
tracks=TrackSerializer(many=True,read_only=True)
类元:
型号=相册
字段=['album_name'、'Artister'、'tracks']
如果您看到相册的输出,它将显示如下:

{
    'album_name': 'The Grey Album',
    'artist': 'Danger Mouse',
    'tracks': [
        {'order': 1, 'title': 'Public Service Announcement', 'duration': 245},
        {'order': 2, 'title': 'What More Can I Say', 'duration': 264},
        {'order': 3, 'title': 'Encore', 'duration': 159},
        ...
    ],
}
在您的情况下,修改
serializers.py
如下所示:


#用户序列化程序
类userSerializer(serializers.ModelSerializer):
user\u data=userdataSerializer(many=True,read\u only=True)
类元:
模型=用户
字段='\uuuu所有\uuuu'
字段+=[“用户数据”]
#用户数据序列化程序
类userdataSerializer(serializers.ModelSerializer):
类元:
模型=用户数据
字段='\uuuu所有\uuuu'
这样,您的
用户
也包含来自
用户数据
模型的数据。

我正在清除用户的答案(无法评论,信誉不够)。我想你应该用这个概念。从文档中:

类TrackSerializer(serializers.ModelSerializer):
类元:
模型=轨道
字段=[“顺序”、“标题”、“持续时间”]
类序列化程序(serializers.ModelSerializer):
tracks=TrackSerializer(many=True,read_only=True)
类元:
型号=相册
字段=['album_name'、'Artister'、'tracks']
如果您看到相册的输出,它将显示如下:

{
    'album_name': 'The Grey Album',
    'artist': 'Danger Mouse',
    'tracks': [
        {'order': 1, 'title': 'Public Service Announcement', 'duration': 245},
        {'order': 2, 'title': 'What More Can I Say', 'duration': 264},
        {'order': 3, 'title': 'Encore', 'duration': 159},
        ...
    ],
}
在您的情况下,修改
serializers.py
如下所示:


#用户序列化程序
类userSerializer(serializers.ModelSerializer):
user\u data=userdataSerializer(many=True,read\u only=True)
类元:
模型=用户
字段='\uuuu所有\uuuu'
字段+=[“用户数据”]
#用户数据序列化程序
类userdataSerializer(serializers.ModelSerializer):
类元:
模型=用户数据
字段='\uuuu所有\uuuu'

这样,您的
用户
也包含来自
用户数据
模型的数据。

我不确定如何准确地执行此操作我不确定如何准确地执行此操作