Exporting items from a model to CSV Django / Python

前端 未结 9 2041
死守一世寂寞
死守一世寂寞 2021-02-03 09:52

I\'m fairly new to django and Python and want to be able to export a list of items in my model i.e products. I\'m looking at the documentation here - https://docs.djangoproject.

相关标签:
9条回答
  • 2021-02-03 10:45

    Use this solution for model csv file.might being helpful

     # Create the HttpResponse object with the appropriate CSV header.
     response = HttpResponse(content_type='text/csv')
     response['Content-Disposition'] = 'attachment; 
     filename="somefilename.csv"'
     writer = csv.writer(response);
     writer.writerow(["username","Email"]);
     for i in User.objects.all():
         writer.writerow([i.username,i.email])
     return response
    
    0 讨论(0)
  • 2021-02-03 10:48

    Have a look at the python csv module.

    You'll probably want to get the models fields with

    def get_model_fields(model):
        return model._meta.fields
    

    Then use

    getattr(instance, field.name)
    

    to get the field values (as in this question).

    Then you'll want something like

    with open('your.csv', 'wb') as csvfile:
        writer = csv.writer(csvfile)
        # write your header first
        for obj in YourModel.objects.all():
            row = ""
            for field in fields:
                 row += getattr(obj, field.name) + ","
            writer.writerow(row)
    

    It's a bit verbose (and untested), but it should give you an idea. (Oh and don't forget to close your file)

    0 讨论(0)
  • 2021-02-03 10:51

    You can also make a template to assist in formatting!

    The template is a common Django template

    from django.template import loader
    def export_to_csv(request):
        response = HttpResponse(mimetype='text/csv')
        response['Content-Disposition'] = 'attachment; filename="products-list.csv"'
        template = loader.get_template('templates/products_template.csb')
        response.write(template.render(Context({'products': Products.objects.all()})))
        return response
    
    0 讨论(0)
提交回复
热议问题