首页 > 解决方案 > Django 休息框架工作;组合来自不同模型的数据不起作用

问题描述

我尝试合并来自两个模型的数据。序列化程序看起来像这样。


class FindOwnerSaveSerializer(serializers.ModelSerializer):



    class Meta:
        model = User
        fields = ('id', 'username', 'first_name', 'last_name','image')
        #fields = ('__all__')

class SaveSerializer(serializers.ModelSerializer):

    content = FindOwnerSaveSerializer(source='user',read_only=True)

    class Meta:
        model = Save
        fields = ('project_id','content')

保存模型如下所示

class Save(models.Model):
    project_id = models.ForeignKey(Project, on_delete=models.DO_NOTHING)
    user_id = models.ForeignKey(User, on_delete=models.DO_NOTHING)

视图看起来像这样


class SaveView(UpdateAPIView):
    serializer_class = SaveSerializer
    permission_classes = [IsAuthenticated]

    def get_queryset(self):
        try:
            return Save.objects.filter(user_id=self.request.user)
        except Exception as e:
            logger.error(e)
            return Response(data='false')

    def get_object(self):
        try:
            if Project.objects.get(project_id=self.request.data['project_id']):
                return Response(data='true')
        except Exception as e:
            logger.error(e)
            return Response(data='false ')

响应看起来像这样。没有用户数据进入。

[
    {
        "project_id": 78
    }
]


可能是什么问题。我正在使用 django 2.2.7 和 rest framewework 3.10.3。

标签: python-3.xdjango-rest-framework

解决方案


您的来源参考的问题,应该source='user_id'不是source='user'

class SaveSerializer(serializers.ModelSerializer):

    content = FindOwnerSaveSerializer(source='user_id',read_only=True) # not `source='user'`

    class Meta:
        model = Save
        fields = ('project_id','content')

推荐阅读