【问题标题】:How to get header and data from Models in Python?如何从 Python 中的模型中获取标头和数据?
【发布时间】:2022-01-16 19:56:49
【问题描述】:

按照这个例子(对于openpyxl):

from openpyxl.workbook import Workbook

header = [u'Name', u'Email', u'Mobile', u'Current location',]
new_data = [[u'name1', u'email1@yahoo.com', 9929283421.0, u'xxxx'], [u'name2', u'email2@xyz.com', 9994191988.0, u'xxxx']]
wb = Workbook()

dest_filename = 'empty_book.xlsx'

ws1 = wb.active

ws1.title = "range names"

ws1.append(header)

for row in new_data:
    ws1.append(row)

wb.save(filename = dest_filename)

我必须在标题和数据本身上拆分将要写入 xlsx 文件的数据。

那么,如何从 Django 中的模型中提取标头和数据?

【问题讨论】:

  • model_name.objects.all() 会给你存储在模型中的所有数据,对吗?遍历这个查询集并将数据写入 Excel 工作表。我不知道这里有什么问题?另外,如果您能接受我对your previous question 的回答,我将不胜感激
  • 它会给我模型中的行,而不是标题。我需要从模型中获取列名作为数组。
  • @Cheng 问题是我不仅需要写数据,还需要写标题,这是几个字段的复合:take.ms/MIA11
  • 这个问题真的是关于从 Django 模型中获取列描述吗?这应该包含在 Django 文档中,但我怀疑这是从 DB-API 派生的,一旦查询运行,查询的列描述就可以从游标中获得。
  • 这些标头存储在哪里?请出示您的型号。

标签: python django model xlsx openpyxl


【解决方案1】:

要修改数据库中模型的列名,请执行以下操作:

from django.db import models

class MyModel(models.Model):
    gender = models.CharField(db_column=u'column_name', max_length=10)

如果您不想更改数据库的列名,请改用verbose_name:

    gender = models.CharField(verbose_name=u'column_name', max_length=10)

然后,当你准备好输出excel表时:

for f in MyModel._meta.get_fields():
    print f.db_column  # or f.verbose_name

这是您遍历模型中所有列并获取它们的名称的方式。

为什么必须将标题名称存储在模型中?为什么不能将它们静态存储在列表中?

当您有一个跨多个列的标题时,就无法将它们存储在模型中。

【讨论】:

  • 不,我的问题是:有这张表take.ms/MIA11 我需要在Excel 中将这张图片作为一个整体重现。截图中显示的这个header在extJS前端一侧,其他信息是从后端拉上来的。我想有可能以某种方式使用模型中的 meta 字段,但不太了解如何实现它?
  • @paus 请查看我的编辑。这将是我最后一次尝试。
猜你喜欢
  • 1970-01-01
  • 2018-04-17
  • 2021-05-02
  • 1970-01-01
  • 2019-10-19
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
相关资源
最近更新 更多