Exporting items from a model to CSV Django / Python

前端 未结 9 2177
死守一世寂寞
死守一世寂寞 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:34

    I combined some of the previous answers, because I needed to import some data from production and change some of it along the way. So here is my solution, which you can use to override some field values while writing the CSV file.

    Export some queryset data into CSV file:

    import csv
    
    from myapp.models import MyModel
    from user.models import User
    
    # Make some queryset manually using Django shell:
    user = User.objects.get(username='peterhil')
    queryset = MyModel.objects.filter(user=user)
    
    def query_to_csv(queryset, filename='items.csv', **override):
        field_names = [field.name for field in queryset.model._meta.fields]
        def field_value(row, field_name):
            if field_name in override.keys():
                return override[field_name]
            else:
                return row[field_name]
        with open(filename, 'w') as csvfile:
            writer = csv.writer(csvfile, quoting=csv.QUOTE_ALL, delimiter=',')
            writer.writerow(field_names)  # write the header
            for row in queryset.values(*field_names):
                writer.writerow([field_value(row, field) for field in field_names])
    
    # Example usage:
    query_to_csv(queryset, filename='data.csv', user=1, group=1)
    

提交回复
热议问题