Django ReportLab get_FOO_display()无法处理列表
我创建了一个用户填写的表单,然后使用reportlab创建他们答案的pdf 除了包含列表的charfield(首选_主题)之外,它工作得很好。数据的保存方式如下: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
['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,非常感谢。它起作用了。这对我帮助很大