从数据库填充数据到Word(Django Python)

7lrncoxx  于 2022-11-18  发布在  Go
关注(0)|答案(3)|浏览(145)

我不知道如何获取数据并填充到我的word模板中。它实际上是一个很长的列表,我需要在word文档中的表格中填充它。我做得对吗?下面是我的代码:

  • 查看次数.py*
def save_sample_details(request):
    sample = SampleList.objects.all()
    doc = DocxTemplate("lab_management/word/sample_template.docx")

    context = {
        'SNAME' : sample.sample_name,
        'STYPE' : sample.sample_type,
        'HVER' : sample.hardware_version,
        'SVER' : sample.software_version,
        'CS' : sample.config_status,
        'NUM' : sample.number,
        'SNUM' : sample.sample_number,
    }

    doc.render(context)
    doc.save('lab_management/word/sample.docx')

    return redirect('/lab/sample/details/')
  • 模型.py*
class SampleList(models.Model):
    sample_name = models.CharField(max_length=32)
    sample_type = models.CharField(max_length=32)
    hardware_version = models.CharField(max_length=32)
    software_version = models.CharField(max_length=32)
    config_status = models.CharField(max_length=18)
    number = models.IntegerField(default=0)
    sample_number = models.CharField(max_length=17)

因此,如果我运行此命令,它会显示 “QuerySet”对象没有属性“sample_name” 等。

tkclm6bt

tkclm6bt1#

当你调用SampleList.objects.all()时,你会得到所有的SampleList对象,所以这是返回一个QuerySet,其中包含零个或多个对象,而不是你想要的单个对象。
相反,您应该获取所需的单个SampleList对象:例如sample = SampleList.objects.get(id=1)或另一个示例-要获取QuerySet中的第一个对象,可以执行sample = SampleList.objects.all()[0](但如果QuerySet为空,则会出现索引错误)。您没有指定如何确定要将哪个SampleList放入Word文档中,但可以在.get()属性中指定任何筛选器。
Django有一些关于查询集的文档:https://docs.djangoproject.com/en/4.1/ref/models/querysets/

fjaof16o

fjaof16o2#

将代码更改为:

def save_sample_details(request):
    sample_list = SampleList.objects.all()
    doc = DocxTemplate("lab_management/word/sample_template.docx")

    context_list = []
    for sample in sample_list:
        context = {
            'SNAME' : sample.sample_name,
            'STYPE' : sample.sample_type,
            'HVER' : sample.hardware_version,
            'SVER' : sample.software_version,
            'CS' : sample.config_status,
            'NUM' : sample.number,
            'SNUM' : sample.sample_number,
        }
        context_list.append(context)

    doc.render(context_list)
    doc.save('lab_management/word/sample.docx')

    return redirect('/lab/sample/details/')

您还应该在文档中的context_list中进行迭代。
(假设您使用的是docxtpl库)

xt0899hw

xt0899hw3#

我已经回答了我的问题。谢谢你的帮助!

  • 查看次数.py*
def save_sample_details(request):
    sample = SampleList.objects.all()[0:15]
    template = DocxTemplate("lab_management/word/sample_template.docx")

    context = {
        'headers' : ['SNAME', 'STYPE', 'HVER', 'SVER', 'CS', 'NUM', 'SNUM'],
        'list': [],
    }

    alist = ['a']

    for i in alist: 
        for samples in sample:
            content= [samples.sample_name, samples.sample_type, samples.hardware_version,
                      samples.software_version, samples.config_status, samples.number, 
                      samples.sample_number ]
            context['list'].append(content)

    template.render(context)
    template.save('lab_management/word/sample.docx')
    return redirect('/lab/sample/details/')
  • 样本模板.docx* x1c 0d1x

相关问题