将项目从模型导出到CSV Django/Python

Jos*_*ies 7 python django django-models python-3.x

我是django和Python的新手,希望能够导出我的模型中的项目列表,即产品.我正在看这里的文档 - https://docs.djangoproject.com/en/dev/howto/outputting-csv/

我需要创建一个存储我想要的所有数据的变量.但不确定它在上面链接的代码片段中的位置.

道歉,因为这是一个非常无聊的问题,但真的会有任何帮助.

这是我的脚本到目前为止的代码:

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"'
Run Code Online (Sandbox Code Playgroud)

Aid*_*wen 12

看看python csv模块.

您可能希望获得模型字段

def get_model_fields(model):
    return model._meta.fields
Run Code Online (Sandbox Code Playgroud)

然后用

getattr(instance, field.name)
Run Code Online (Sandbox Code Playgroud)

获取字段值(如问题所示).

然后你会想要类似的东西

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)
Run Code Online (Sandbox Code Playgroud)

它有点冗长(并且未经测试),但它应该给你一个想法.(哦,别忘了关闭你的档案)


Tom*_*dor 12

根据具体情况 - 您可能希望拥有模型的CSV.如果您可以访问Django Admin站点,则可以为显示为列表的任何模型插入一般操作(google:django admin actions)

http://djangosnippets.org/snippets/790/

如果您使用控制台(python manage.py ...)进行操作,则可以使用我刚才使用的脚本:

(将其放入:yourapp/management/commands/model2csv.py)

"""
 Prints CSV of all fields of a model.
"""

from django.core.management.base import BaseCommand, CommandError
import csv
import sys

class Command(BaseCommand):
    help = ("Output the specified model as CSV")
    args = '[appname.ModelName]'

    def handle(self, *app_labels, **options):
        from django.db.models import get_model
        app_name, model_name = app_labels[0].split('.')
        model = get_model(app_name, model_name)
        field_names = [f.name for f in model._meta.fields]
        writer = csv.writer(sys.stdout, quoting=csv.QUOTE_ALL)
        writer.writerow(field_names)
        for instance in model.objects.all():
            writer.writerow([unicode(getattr(instance, f)).encode('utf-8') for f in field_names])
Run Code Online (Sandbox Code Playgroud)

这没有捕获任何异常等,但作为管理员,你不会导致它们被提出,对吧?

使用它像:

./manage.py model2csv my_ecommerce.Product > products.csv
Run Code Online (Sandbox Code Playgroud)