У меня есть веб-сайт, на котором пользователи должны заполнить большую анкету, разбросанную по четырем веб-страницам (и четырем формам), и после заполнения анкеты 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)
модели.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, но я не думаю, что его стоит включать)
Это работает нормально, за исключением таких полей, как «пол». Потому что он получает значения, которые печатает в pdf из user.personalinformation из базы данных, вместо печати «Пол: мужской», печатает «Пол: M». Хотя этот пример кажется тривиальным, есть еще много полей с парами ключ/значение и логическими значениями, которые не имеют смысла печататься таким образом.
Как я могу распечатать значения по мере их отображения в форме и для пользователя, а не распечатывать значения, сохраненные в базе данных?
Спасибо.