0

I am working with a Django project, where I am trying to render a pdf and save it in my database.

my models.py:

class Final_report(models.Model):
    industry = models.ForeignKey(Industry, null=True, blank=True, on_delete=models.CASCADE)
    inspector = models.ForeignKey(Inspector, null=True, blank=True, on_delete=models.CASCADE)
    created_date = models.DateTimeField(default=datetime.now, blank=True)
    pdf = models.FileField(upload_to='documents')

my views.py:

def submit_report(request, pk):
    template = get_template('app/pdf_rprt.html')
    Industry_obj = Industry.objects.get(id=pk)
    Industry_Report_obj = Industry_obj.industry_report_set.all()
    report_tableA_obj = report_tableA.objects.filter(industry_report__industry=Industry_obj)
    context = {
        'industry' : Industry_obj,
        'Industry_Report' : Industry_Report_obj,
        'report_tableA' : report_tableA_obj,
    }

    html = template.render(context)
    pdf = render_to_pdf('app/pdf_rprt.html', context)
    if pdf:
        this_industry = Industry_obj
        this_inspector = request.user.inspector_releted_user
        this_pdf = pdf
        this_created_date = timezone.now()

        Final_report_obj = Final_report.objects.create(industry=this_industry, inspector=this_inspector, pdf=this_pdf, created_date=this_created_date)
        Final_report_obj.save()

    return redirect('app:index')

here the render_to_pdf comes from a custom build function in utils.py:

def render_to_pdf(template_src, context_dict={}):
    template = get_template(template_src)
    html  = template.render(context_dict)
    result = BytesIO()
    pdf = pisa.pisaDocument(BytesIO(html.encode("ISO-8859-1")), result)
    if not pdf.err:
        return HttpResponse(result.getvalue(), content_type='application/pdf')
    return None

Now it says the following error:

Internal Server Error: /submit_report/1/
Traceback (most recent call last):
  File "G:\Python\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "G:\Python\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "G:\Python\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "D:\Project\django\hackathon practice\ProjectSurokkhaBeta_1.7\app\views.py", line 526, in submit_report    
    Final_report_obj = Final_report.objects.create(industry=this_industry, inspector=this_inspector, pdf=this_pdf, created_date=this_created_date)
  File "G:\Python\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "G:\Python\lib\site-packages\django\db\models\query.py", line 433, in create
    obj.save(force_insert=True, using=self.db)
  File "G:\Python\lib\site-packages\django\db\models\base.py", line 745, in save
    self.save_base(using=using, force_insert=force_insert,
  File "G:\Python\lib\site-packages\django\db\models\base.py", line 782, in save_base
    updated = self._save_table(
  File "G:\Python\lib\site-packages\django\db\models\base.py", line 887, in _save_table
    results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw)
  File "G:\Python\lib\site-packages\django\db\models\base.py", line 924, in _do_insert
    return manager._insert(
  File "G:\Python\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "G:\Python\lib\site-packages\django\db\models\query.py", line 1204, in _insert
    return query.get_compiler(using=using).execute_sql(returning_fields)
  File "G:\Python\lib\site-packages\django\db\models\sql\compiler.py", line 1390, in execute_sql
    for sql, params in self.as_sql():
  File "G:\Python\lib\site-packages\django\db\models\sql\compiler.py", line 1333, in as_sql
    value_rows = [
  File "G:\Python\lib\site-packages\django\db\models\sql\compiler.py", line 1334, in <listcomp>
    [self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields]
  File "G:\Python\lib\site-packages\django\db\models\sql\compiler.py", line 1334, in <listcomp>
    [self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields]
  File "G:\Python\lib\site-packages\django\db\models\sql\compiler.py", line 1285, in pre_save_val
    return field.pre_save(obj, add=True)
  File "G:\Python\lib\site-packages\django\db\models\fields\files.py", line 286, in pre_save
    if file and not file._committed:
AttributeError: 'HttpResponse' object has no attribute '_committed'
[12/Jan/2021 00:19:32] "GET /submit_report/1/ HTTP/1.1" 500 142121
[12/Jan/2021 00:20:13] "GET /report_generating/1/ HTTP/1.1" 200 4082

mainly it shows error by indicating this line:

Final_report_obj = Final_report.objects.create(industry=this_industry, inspector=this_inspector, pdf=this_pdf, created_date=this_created_date)

How can I fix it?

Kanchon Gharami
  • 777
  • 1
  • 11
  • 30
  • 2
    You can't store an `HttpResponse` in a `FileField`. I think something like `from django.core.files.base import ContentFile` and then changing `return HttpResponse(result.getvalue(), content_type='application/pdf')` to `return ContentFile(result.getvalue())` should work. – Boris Verkhovskiy Jan 11 '21 at 19:46
  • 1
    Does this answer your question? [How to Save io.BytesIO pdfrw PDF into Django FileField](https://stackoverflow.com/questions/60175556/how-to-save-io-bytesio-pdfrw-pdf-into-django-filefield) – Boris Verkhovskiy Jan 11 '21 at 19:47
  • thanks a lot, not it is working perfectly! – Kanchon Gharami Jan 12 '21 at 02:42

0 Answers0