如何使用Django-Import-Export导入数据?

时间:2015-09-09 15:28:10

标签: django django-import-export

django-import-export的文档在如何配置管理员从电子表格导入方面有点弱。有没有人有完整的例子?

2 个答案:

答案 0 :(得分:1)

以下是如何操作,假设电子表格中的列名称为TitleField one。此示例假定将在每次导入时重新创建模型实例(而不是通过主键更新)。

from django.contrib import admin
from import_export.admin import ImportMixin
from import_export import resources, fields
from .models import MyModel


class MyModelResource(resources.ModelResource):

    title = fields.Field(attribute='title',
                         column_name='Title')
    field_one = fields.Field(attribute='field_one',
                             column_name='Field one')

    def get_instance(self, instance_loader, row):
        # Returning False prevents us from looking in the
        # database for rows that already exist
        return False

    class Meta:
        model = MyModel
        fields = ('title', 'field_one')
        export_order = fields


class MyModelAdmin(ImportMixin, admin.ModelAdmin):
    resource_class = MyModelResource


admin.site.register(MyModel, MyModelAdmin)

答案 1 :(得分:0)

这不是一个完整的模块。但你可以理解它应该如何。

resources.py文件

from import_export import resources
from .models import edxUser

class edxUserResource(resources.ModelResource):
    class Meta:
        model = edxUser
        #skip_unchanged = True
        #report_skipped = True
        #if you want to exclude any field from exporting
        exclude = ('id','edx_anonymized_id') 
        fields = ('id', 'edx_id', 'edx_anonymized_id', 'edx_email', 'edx_name', 'time_created', 'created_by')
        #Order of the export fields
        export_order = ('edx_id', 'edx_email')

admin.py文件

from import_export.admin import ImportExportModelAdmin
from django.contrib import admin
from .models import edxUser
from resources import edxUserResource


@admin.register(edxUser)
class edxUserAdmin(ImportExportModelAdmin):
    resource_class = edxUserResource

models.py文件

from __future__ import unicode_literals
from django.conf import settings
from django.db import models

class edxUser(models.Model):
    edx_id = models.IntegerField('edX user id', blank=True, null=True)
    edx_anonymized_id = models.IntegerField("edX anonymized user id", blank=True, null=True)
    edx_email = models.EmailField('edx user email', max_length=75, blank=True)
    edx_name = models.CharField('edx name', max_length=75, blank=True, null=True)
    time_created = models.DateField('Created time', blank=True, null=True)
    created_by = models.OneToOneField(settings.AUTH_USER_MODEL, null=True, blank=True)

    def __unicode__(self):
        return str(self.edx_id)