вывод django pdf - PullRequest
       1

вывод django pdf

2 голосов
/ 21 июня 2011

Привет всем, как я в стадии обучения Джанго, так что поддержите меня. Я должен создавать отчеты в формате PDF в django. Я хочу, чтобы детали были отобраны из базы данных и отображены в документе PDF. Я использую лабораторию отчетов. Теперь взгляните на код

def pdf_view(request):
    response = HttpResponse(mimetype='application/pdf')
    response['Content-Disposition'] = 'attachment; filename=hello.pdf'
    p = canvas.Canvas(response)
    details = Data.objects.all()
    print details

    p.drawString(20, 800, details)
    p.drawString(30, 700, "I am a Python Django Professional.")
    p.showPage()
    p.save()
    return response

Теперь в качестве учебного примера я сделал два поля в моделях

class Data(models.Model):
    first_name = models.CharField(max_length =100,blank=True,null=True)
    last_name = models.CharField(max_length =100,blank=True,null=True)

    def __unicode__(self):
        return self.first_name

и я хочу, чтобы в документе PDF он отображал имена, какие бы я ни заполнил через админа, но это дает мне ошибку

'Data' object has no attribute 'decode'

Request Method:     GET
Request URL:    http://localhost:8000/view_pdf/
Django Version:     1.3
Exception Type:     AttributeError
Exception Value: 

Я хочу выбрать детали из базы данных и отобразить в pdf документе

'Data' object has no attribute 'decode'

1 Ответ

4 голосов
/ 21 июня 2011

Это помогло бы, если бы вы опубликовали реальную трассировку.

Однако я ожидаю, что проблема заключается в этой строке:

p.drawString(20, 800, details)

Подробности - это набор запросов, который представляет собой контейнер в виде списка экземпляров модели. Это не строка, и при этом она не содержит строку. Может быть, вы хотите что-то вроде:

detail_string = u", ".join(unicode(obj) for obj in details) 

, который вызывает метод __unicode__ для каждого объекта в вашем наборе запросов и объединяет результирующий список с запятыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...