[英]Passing a cursor to a Serializer in django-rest-framework?
我正在使用Django 1.8和django-rest-framework v3.2.2。 我有一个涉及原始SQL的查询:
@api_view(['GET'])
def total_spending(request, format=None):
code = request.query_params.get('code', None)
query = 'SELECT * FROM vw_presentation_summary WHERE code=%s"
cursor = connection.cursor()
cursor.execute(query, tuple([code]))
cursor.close()
我的问题是如何使用此光标并将其转换为我可以传递给django-rest-framework的Response
的数据对象。
现在我正在手动完成它,它可以正常工作:
def dictfetchall(cursor):
"Returns all rows from a cursor as a dict"
desc = cursor.description
return [
dict(zip([col[0] for col in desc], row))
for row in cursor.fetchall()
]
def total_spending(request, format=None):
...
return Response(dictfetchall(cursor))
但是以某种方式使用Serializer会更好吗? 我不清楚Serializers除了定义你想要返回的字段之外还做了什么有用的事情。
除非您正在处理模型对象的某些复杂(包括嵌套)表示,否则如果您只是将它用于序列化对象,则序列化程序是过度的。 正如您已经注意到的那样,您的所有字段都可以本地序列化而无需任何额外步骤。
序列化程序非常适合于对输出进行整形(重命名字段,使用嵌套的序列化程序对它们进行分组)并始终如一地进行。 在使用Django模型时尤其如此,因为Django本身并不将模型对象序列化为Python字典,它更喜欢实际的模型对象。
序列化器的强大之处在于反序列化,它可以跨模型映射字段并为您构建关系。 它还可以对所有这些关系进行验证,这通常需要一段时间才能手动执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.