Python Django rest框架中的联接表字段
我进入了一个PHP到Django的迁移项目,在这个项目中,我无法更改数据库的模式 对于没有FK的字段,有些地方存在多个联接,我现在无权添加它们。甚至在我的Django模型上,因为数据库的巨大规模和项目交付的时间限制 我正在使用Django rest框架并重写list方法和queryset来接受这些原始SQLPython 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""" 问题是我无法在字段元
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)