![](/img/trans.png)
[英]django-rest-framework how to make model serializer fields required
[英]Joined table fields in Django-rest-framework
我正在从PHP到Django的迁移项目中,无法更改数据库的架构
在有些地方,对于没有FK的字段,存在多个联接,我现在无权添加它们。 甚至在我的Django模型上,由于数据库巨大且项目交付受时间限制。
我正在使用Django-rest-framework并覆盖list方法和queryset以接受这些原始sql。
sql = """SELECT
a.field1,
b.field2
FROM a
LEFT JOIN b ON a.fieldx = b.fieldy"""
问题是我无法在字段元组内的序列化程序类上添加联接表的字段,因为我说model = models.A,并且此模型没有有关模型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”属性来包括嵌套序列化 。
class ClassroominfoSerializer(serializers.ModelSerializer):
class Meta:
model = models.Classroominfo
fields = ('classroomid', 'assessmentid','resourceid', 'writtenworkid')
depth = 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.