Django ReportLab get_FOO_display()无法处理列表

Django ReportLab get_FOO_display()无法处理列表,django,django-forms,reportlab,Django,Django Forms,Reportlab,我创建了一个用户填写的表单,然后使用reportlab创建他们答案的pdf 除了包含列表的charfield(首选_主题)之外,它工作得很好。数据的保存方式如下: ['ANI', 'EDU', 'ENV'] [['ANI'], ['EDU'], ['ENV']] 我认为这可能是一个问题,因为我要执行以下操作来保存数据: ['ANI', 'EDU', 'ENV'] [['ANI'], ['EDU'], ['ENV']] 然而,它在网站上运行良好 因此,要使用get\u FOO\u disp

我创建了一个用户填写的表单,然后使用reportlab创建他们答案的pdf

除了包含列表的charfield(首选_主题)之外,它工作得很好。数据的保存方式如下:

['ANI', 'EDU', 'ENV']
[['ANI'], ['EDU'], ['ENV']]
我认为这可能是一个问题,因为我要执行以下操作来保存数据:

['ANI', 'EDU', 'ENV']
[['ANI'], ['EDU'], ['ENV']]
然而,它在网站上运行良好

因此,要使用
get\u FOO\u display()
将人类可读的数据打印到pdf im,但这不适用于首选主题。如果我调用
(user.personalinformation.get\u preferred\u topics\u 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\u preferred\u topics\u display()
,但它不起作用,我怀疑是因为数据错误地保存在数据库中,但我希望在销毁数据之前得到确认


谢谢。

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

如果没有“模型”字段上的选项,就没有get_FOO_display(),所以您需要编写自己的转换器

# create dict of options
options = dict((y,x) for y,x in PersonalInformationForm.TOPICS)

# evaluate string to list
selected_choices = ast.literal_eval(testobj2.preferred_topics)

# find choices in dict
selected values = [option.get(key) for key in selected_choices]

在modelHello中首选哪种类型的主题?请再说一遍。您的解决方案对我的其他字段非常有效:)。我添加了模型,非常感谢。虽然我不能使用Arrayfield,因为我使用的是MySQL,非常感谢。它起作用了。这对我帮助很大