【问题标题】:How to exports django models with foreign key to csv如何将具有外键的 django 模型导出到 csv
【发布时间】:2021-10-29 01:18:23
【问题描述】:

我有这个会话模型:

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

这很好,但外国模特只返回他们的 id。 如何将包括外国模型在内的所有模型导出到一行中?

【问题讨论】:

    标签: python django-models foreign-keys export-to-csv


    【解决方案1】:

    所以我只是回来发布我的解决方案。

    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方式来做到这一点

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 2012-03-16
      • 2015-09-19
      • 1970-01-01
      相关资源
      最近更新 更多