python - 如何将具有外键的 django 模型导出到 csv
问题描述
我有这个会话模型:
class session(models.Model):
id = models.BigAutoField(primary_key=True)
responden = models.ForeignKey(responden, on_delete=models.CASCADE)
kognitifScore = models.IntegerField()
sosioScore = models.IntegerField()
fisikScore = models.IntegerField()
totalScore = models.IntegerField()
timeStart = models.DateTimeField(auto_now_add=False)
timeEnd = models.DateTimeField(auto_now_add=False)
duration = models.IntegerField()
mark = models.ForeignKey(sessionMark, on_delete=models.CASCADE)
order = models.ForeignKey(sessionOrder, on_delete=models.CASCADE)
现在我想将所有这些信息导出到 csv。我试试这个:
def exportsCSV(request):
sessions = session.objects.all()
response = HttpResponse('text/csv')
response['Content-Disposition'] = 'attachment; filename=sessions.csv'
writer = csv.writer(response)
sess = sessions.values_list('id','kognitifScore','sosioScore','fisikScore','totalScore',
'timeStart','timeEnd','duration','mark','order')
for s in sess:
print(s)
writer.writerow(s)
return response
这很好,但外国模特只返回他们的身份证。我如何将包括外国模型在内的所有这些导出到一行中?
解决方案
所以我只是回来发布我的解决方案。
def exportsCSV(request):
sessions = session.objects.all()
respondens = responden.objects.all()
marks = sessionMark.objects.all()
orders = sessionOrder.objects.all()
response = HttpResponse('')
response['Content-Disposition'] = 'attachment; filename=sessions.csv'
writer = csv.writer(response,delimiter=';', quotechar='"', quoting=csv.QUOTE_MINIMAL)
id = sessions.values_list('id')
sess = sessions.values_list()
resp = respondens.values_list()
mark = marks.values_list()
order = orders.values_list()
ready = []
for s in sess:
for r in resp:
if (r[0] == s[1]):
ready.append(s[0])
ready.extend(list(r[1:]))
ready.extend(list(s[2:9]))
break
for m in mark:
if (m[0] == s[9]):
ready.extend(list(m[1:]))
break
for ord in order:
if (ord[0] == s[10]):
ready.extend(list(ord[1:]))
break
writer.writerow(ready)
ready = []
return response
我只是检查每个通讯员 ID,然后手动添加到数组中。我认为这种方法相当肮脏,也许有更多的pythonic方式来做到这一点
推荐阅读
- amazon-web-services - 如何使用数据源通过 terraform 找出 AWS 负载均衡器的 ARN?
- neo4j - 如何在 Neo4j 的 apoc.cypher.mapParallel 片段中使用 MERGE?
- node.js - 获取 API 和 Node Js
- r - 在 R 中使用 Count 可透视
- javascript - React,redux 状态依赖于其他 redux 状态
- sql - 查询为每个级别的父级生成新列
- css - div innerHTML 内 PWA 应用程序上 iPad 上的故障文本
- ffmpeg - ffmpeg IP 摄像机无法录制
- python - 在 Python 中多线程处理相同的 API 请求
- java - 有没有办法制作一个数组列表,它在彼此之间混合所有它的组件,而不是在需要时重复所述组件