ReportLab get_FOO_display()在列表上不起作用

问题描述 投票:0回答:1

我创建了一个用户填写的表格,然后使用reportlab创建其答案的pdf。

除了包含列表的charfield(preferred_topics)之外,其他方法都很好。数据保存如下:

['ANI', 'EDU', 'ENV']

我认为这可能是一个问题,因为id会像这样保存它来保存数据:

[['ANI'], ['EDU'], ['ENV']]

但是在网站上效果很好。

因此要使用get_FOO_display()将人类可读数据打印到pdf即时消息,但这不适用于preferred_topics。如果我拨打(user.personalinformation.get_preferred_topics_display(),我会得到:

AttributeError at /enrolment/final_question/
'PersonalInformation' object has no attribute 'get_preferred_topics_display'

这是我的其他相关代码:

model.py

preferred_topics = models.CharField(max_length=200, default='')

utils.py

# generate pdf
def generate_pdf(request):
    # get user
    user = request.user

    # data that will be printed to the pdf
    page_contents = [
        ['Personal Information'],
        ['Name:', '%s %s' %(user.personalinformation.first_name, user.personalinformation.surname)],
        ['E-mail:', '%s' %(user.email)],
        ['Gender:', '%s' %(user.personalinformation.get_gender_display())],
        # this field is causing grief
        ['Preferred Topics:', '%s' %(user.personalinformation.preferred_topics)]
    ]

forms.py

TOPICS = (
        ('ANI', 'Animals'),
        ('ART', 'Art'),
        ('COM', 'Communication'),
        ('CRI', 'Crime'),
    )

    preferred_topics = forms.MultipleChoiceField(choices=TOPICS, required=False, widget=forms.CheckboxSelectMultiple())

[我期望被告知数据被错误地保存在我的数据库中,但是不知道如何更改它,并且在我开始更改以前的工作内容之前需要确认,因为我肯定会破坏该过程中的当前工作内容。] >

摘要-我想使用user.personalinformation.get_preferred_topics_display(),但它不起作用,我怀疑它是因为数据被错误地保存在db中,但想在破坏之前进行确认。

谢谢。

我创建了一个用户填写的表格,然后使用reportlab创建其答案的pdf。除了包含列表的charfield(preferred_topics)之外,它的效果都很好。数据保存为...

django django-forms reportlab
1个回答
1
投票

您将多个选择保存为单个字符串,这不是一个好主意,因为您将很难过滤和处理此类数据(而是使用选择的Arrayfield)

© www.soinside.com 2019 - 2024. All rights reserved.