Python – Exporting items from a model to CSV Django / Python

djangodjango-modelspythonpython-3.x

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.com/en/dev/howto/outputting-csv/

I'm persuming I need will need to create a variable that stores all the data that I want. But not sure where it would within the snippet of code on the link above.

Apologies as this is a very noobish question but would really Any help at all.

Here is the code to my script so far:

import csv

from products.models import Product

from django.http import HttpResponse


def export_to_csv(request):
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment; filename="mytest.csv"'

Best Answer

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)