Python Django rest框架中的联接表字段

Python Django rest框架中的联接表字段,python,django,django-models,django-rest-framework,Python,Django,Django Models,Django Rest Framework,我进入了一个PHP到Django的迁移项目,在这个项目中,我无法更改数据库的模式 对于没有FK的字段,有些地方存在多个联接,我现在无权添加它们。甚至在我的Django模型上,因为数据库的巨大规模和项目交付的时间限制 我正在使用Django rest框架并重写list方法和queryset来接受这些原始SQL sql = """SELECT a.field1, b.field2 FROM a LEFT JOIN b ON a.fieldx = b.fieldy""" 问题是我无法在字段元

我进入了一个PHP到Django的迁移项目,在这个项目中,我无法更改数据库的模式

对于没有FK的字段,有些地方存在多个联接,我现在无权添加它们。甚至在我的Django模型上,因为数据库的巨大规模和项目交付的时间限制

我正在使用Django rest框架并重写list方法和queryset来接受这些原始SQL

sql = """SELECT
  a.field1,
  b.field2
FROM a
LEFT JOIN b ON a.fieldx = b.fieldy"""
问题是我无法在字段元组中添加序列化器类上的联接表的字段 因为我说model=models.A,而这个模型没有关于model B的信息

谢谢你的帮助

谢谢大家!

更新 我只使用viewset。我没有使用任何视图(这是错误的吗?) 我的视图集

class AdminclassinfoViewSet(viewsets.ModelViewSet): 
    queryset = models.Classroominfo.objects.all()
    serializer_class = ClassroominfoSerializer

    def list(self, request):
       sql = """
         SELECT -- DISTINCT 
           cri.classroomid,
           cri.assessmentid, 
           cri.resourceid,
           al.assessmenttype,
           al.assessmenttitle,
           ri.resourcetype,
           ri.resourcetitle,
           wwi.writtenworktitle,
           cri.writtenworkid, 
           si.firstname,
           si.imageurl,
           date(cri.posteddate) as posteddate,
           cri.studentid
       FROM classroominfo cri
       LEFT OUTER JOIN assignassessmentinfo aai ON aai.assessmentid = cri.assessmentid 
                   AND aai.studentid = cri.studentid 
       LEFT OUTER JOIN assessmentlist al ON al.assessmentid = cri.assessmentid 
       LEFT OUTER JOIN assignresourceinfo ari  ON ari.resourceid = cri.resourceid 
                  AND ari.studentid = cri.studentid 
       LEFT OUTER JOIN resourceinfo ri ON ri.resourceid = cri.resourceid
       LEFT OUTER JOIN assignwrittenworkinfo awwi ON awwi.writtenworkid = cri.writtenworkid
       LEFT OUTER JOIN writtenworkinfo wwi ON wwi.writtenworkid = cri.writtenworkid
       LEFT OUTER JOIN logininfo li ON li.loginid = cri.studentid
       LEFT OUTER JOIN studentinfo si ON si.username = li.username
       WHERE ( ari.isclassroom =1 OR 
             aai.isclassroom =1 OR 
            awwi.isclassroom=1 ) 
       ORDER BY cri.classroomid DESC
       """
       queryset = models.Classroominfo.objects.raw(sql)
       serializer_class = ClassroominfoSerializer
       serializer = ClassroominfoSerializer(queryset, many=True)        
       return Response(serializer.data)
我的序列化程序。我不知道如何引用这里连接的字段

class ClassroominfoSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Classroominfo
        fields = ('classroomid',  'assessmentid','resourceid',
              'writtenworkid')

因此,对于SQL查询,似乎
classroominfo
表位于某种星形模式的中心。您应该能够使用“depth”属性来包含


由于我在截止日期,我恢复运行并转换为DICT列表,并从viewset的list方法返回,如下所示:

desc = cursor.description
result =  [
            dict(zip([col[0] for col in desc], row))
            for row in cursor.fetchall()
    ]
return Response(result)
它仍然使用Django Rest API接口,所以偶尔使用一些硬编码sql查询对我来说并不是什么大问题


但是,如果Django Rest Framework 3.x能够灵活地处理此类用例,我将不胜感激。

您能提供当前序列化程序和视图的内容吗?凯文更新了我的问题。不幸的是,这并没有在API结果中显示我所需的字段。它只显示字段组中的字段。您是否尝试过相关字段?
desc = cursor.description
result =  [
            dict(zip([col[0] for col in desc], row))
            for row in cursor.fetchall()
    ]
return Response(result)