我有一个网站,用户必须在这四个网站(和四个表格)上填写一份大型问卷,填写问卷后,reportlab会生成其答案的pdf。
这是我的工作代码
utils.py
def generate_pdf(request):
# get user
user = request.user
# get users age
born = request.user.personalinformation.dob
age = user_utils.get_age(born)
doc = SimpleDocTemplate(settings.MEDIA_ROOT+'\pdf_templates\\enrolment_form_%s.pdf' %user.id)
styles = getSampleStyleSheet()
enrolment_form = [Spacer(1,2*inch)]
style = styles["Normal"]
page_contents = [
("Name: %s %s" % (user.personalinformation.first_name, user.personalinformation.surname)),
("Gender: %s" % (user.personalinformation.gender)),
("Age: %s" % (age))
]
for sections in page_contents:
p = Paragraph(sections, style)
enrolment_form.append(p)
enrolment_form.append(Spacer(1,0.2*inch))
doc.build(enrolment_form)
models.py
class PersonalInformation(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
GENDERS = (
('M', 'Male'),
('F', 'Female'),
)
first_name = models.CharField(max_length=200, default='')
surname = models.CharField(max_length=200, default='')
gender = models.CharField(max_length=1, choices=GENDERS)
dob = models.DateTimeField('Date of birth (mm/dd/yyyy)', null=True, default=now)
def __str__(self):
return f'{self.user.username}'
((我也有一个form.py,但认为它不值得包括)
这很好,除了“性别”之类的字段。因为它获取值,所以从数据库的user.personalinformation信息将其打印在pdf上,而不是打印“性别:男性”,而是打印“性别:M”。尽管此示例看起来很简单,但是还有更多具有键/值对和布尔值的字段,这种方式打印毫无意义。
我如何打印在表单中显示给用户的值,而不是打印保存在数据库中的值?
谢谢。
您必须使用get_FOO_display()函数来获取所记录的值