标签: django-import-export

Django导入导出 - 无法使用BinaryField导入模型

我正在尝试从可以为空的模型导入数据BinaryField.数据不包含该字段,我希望在字段中使用空值导入它.如果该字段已存在于给定的数据库中id,则应保持该值不变.

我从fields相应Resource对象的白名单中删除了该字段,并将其添加到exclude黑名单中.但是,我在导入时遇到此错误 - can't pickle memoryview objects.

追溯:

Traceback (most recent call last):
File "/lib/python3.5/site-packages/import_export/resources.py", line 451, in import_row
original = deepcopy(instance)
File "/lib/python3.5/copy.py", line 182, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "/lib/python3.5/copy.py", line 297, in _reconstruct
state = deepcopy(state, memo)
File "/lib/python3.5/copy.py", line 155, in deepcopy
y = copier(x, memo)
File "/lib/python3.5/copy.py", line 243, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/lib/python3.5/copy.py", line 174, …
Run Code Online (Sandbox Code Playgroud)

python django django-import-export

15
推荐指数
1
解决办法
576
查看次数

python 3.5 - > 3.6 Tablib TypeError:cell()缺少1个必需的位置参数:'column'

从python 3.5迁移到3.6,我的单元测试显示django-import-export和tablib存在问题:

TypeError:cell()缺少1个必需的位置参数:'column'

File "<path>/lib/python3.6/site-packages/tablib/formats/_xlsx.py", line 122, in dset_sheet
    cell = ws.cell('%s%s' % (col_idx, row_number))
    TypeError: cell() missing 1 required positional argument: 'column'
Run Code Online (Sandbox Code Playgroud)

tablib中的行:

    cell = ws.cell('%s%s' % (col_idx, row_number))
Run Code Online (Sandbox Code Playgroud)

事实上,该专栏没有任何论据

我的观点代码:

my_resource = MyModelResource(queryset=my_queryset)
dataset = my_resource.export()
response = HttpResponse(dataset.xlsx, content_type='application/vnd.ms-excel')
Run Code Online (Sandbox Code Playgroud)

这在python3.5中工作正常但在3.6下失败

requirements.txt:

...
tablib==0.12.1
django-import-export==0.7.0
Django==1.11.7
...
Run Code Online (Sandbox Code Playgroud)

python django django-import-export python-3.6 tablib

11
推荐指数
1
解决办法
4767
查看次数

将foreignKey小部件添加到django-import-export

我正在尝试将数据导入到我的某个模型中,但它失败了,因为我正在尝试上传foreignKey Id,而不是import-export创建的迭代数.

models.py

from django.db import models
from import_export import resources


class School(models.Model):
    name = models.CharField(max_length=100)
    slug = models.CharField(max_length=100)
    school_id = models.IntegerField(unique=True)

class Sol(models.Model):
    school_id = models.ForeignKey(School, to_field='school_id')
    name = models.CharField(max_length = 100)
    Al1EOC = models.DecimalField(max_digits=5, decimal_places=2)
    AL2EOC = models.DecimalField(max_digits=5, decimal_places=2)

#Class for django-import-export
class SolResource(resources.ModelResource):
    class Meta:
        model = Sol
Run Code Online (Sandbox Code Playgroud)

我的admin.py

from import_export.admin import ImportExportModelAdmin


class SolAdmin(ImportExportModelAdmin):
    list_display = ('name', 'school_id')
    resources_class = SolResource
    pass

admin.site.register(Sol, SolAdmin)
Run Code Online (Sandbox Code Playgroud)

我的data.csv

id, name, school_id, Al1EOC, AL2EOC
,'Main st school', 1238008, 12.9, 14.9 …
Run Code Online (Sandbox Code Playgroud)

python django django-import-export

8
推荐指数
2
解决办法
6551
查看次数

Django-import-export - 导入高级字段?

对于Django模型,我使用的是django-import-export包.

如果需要导出更多只有可用的模型字段(如属性或自定义字段),可以使用import_export.fields.Field类和可选dehydrate_<field>方法添加new .

from import_export import resources, fields, instance_loaders

class ProductResource(resources.ModelResource):
    categories  = fields.Field()
    price       = fields.Field(attribute='unit_price')

    class Meta:
        model  = Product

    def dehydrate_categories(self, product):
        return ';'.join(
                '/%s' % '/'.join([c.name for c in cat.parents()] + [cat.name])
                for cat in product.category.iterator() )
Run Code Online (Sandbox Code Playgroud)

它确实运作良好,但仅适用于出口.那么进口,反向过程呢?dehydrate_方法有一些对应的吗?

到目前为止,我已经覆盖了get_or_init_instance方法:

class ProductResource(resources.ModelResource):
    def get_or_init_instance(self, instance_loader, row):
        row['unit_price'] = row['price']; row.pop('price')
        return super(ProductResource, self).get_or_init_instance(instance_loader, row)
Run Code Online (Sandbox Code Playgroud)

但怀疑这是正确的方法.

将不胜感激任何提示如何处理自定义字段的导入.

python django django-models satchmo django-import-export

7
推荐指数
1
解决办法
3643
查看次数

ModuleNotFoundError: 没有名为“import_export”的模块

我使用了以下教程。我使用了命令 pip install django-import-export,然后添加到已安装的应用程序部分。

    INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'import_export',
    'frontend',
    'userauth',
    'methods',
]
Run Code Online (Sandbox Code Playgroud)

当我运行时python manage.py collectstatic出现错误ModuleNotFoundError: No module named 'import_export'

python django django-import-export

7
推荐指数
2
解决办法
1万
查看次数

Django 导入 - 导出:尝试在具有唯一或唯一性_together 约束的字段中插入重复记录时出现 IntegrittyError

更新

我已提交功能请求。我们的想法是passIntegrittyError的时候由数据库产生uniqueunique_together拒绝已经存在于数据库中的记录。


我有以下模型:

class Compositions(models.Model):
    composer_key = models.ForeignKey(
        Composer,
        )
    composition = models.CharField(
        max_length=383,
        )

    class Meta(object):
        unique_together = (('composer_key', 'composition'), )
Run Code Online (Sandbox Code Playgroud)

在管理界面中使用 django-import-export,而不为idcsv 文件中的每个条目提供一个,...如果一对 csv 文件已经存在,该过程将因完整性错误而中断

duplicate key value violates unique constraint "data_compositions_composer_key_id_12f91ce7dbac16bf_uniq"
DETAIL:  Key (composer_key_id, composition)=(2, Star Wars) already exists.
Run Code Online (Sandbox Code Playgroud)

CSV 文件如下:

id  composer_key    composition
        1           Hot Stuff
        2           Star Wars
Run Code Online (Sandbox Code Playgroud)

这个想法skip_row在管理员中使用和实现它。

管理.py:

class CompositionsResource(resources.ModelResource):

    class Meta:
        model = Compositions
        skip_unchanged …
Run Code Online (Sandbox Code Playgroud)

python django django-import-export

6
推荐指数
2
解决办法
3228
查看次数

为 django import_export 扩展管理导入表单

我正在使用Django import_export在我的管理页面中实现 CSV 上传。现在我有一个模型,它包含一个外键列,但是对于每次导入,外键列只有一个值。因此,我希望允许用户从下拉列表中选择相关的模型实例,而不是强迫用户自己附加列。为了做到这一点,我需要自定义导入表单,这需要覆盖默认方法import_actionprocess_import,但到目前为止我的努力没有显示出任何效果。这是我到目前为止所拥有的:

from django import forms
from import_export.forms import ImportForm  
from .models import MyModel, RelatedModel

class CustomImportForm(ImportForm):
    """Add a model choice field for a given model to the standard form."""
    appended_instance = forms.ModelChoiceField(queryset=None)

    def __init__(self, choice_model, import_formats, *args, **kwargs):
        super(CustomImportForm, self).__init__(import_formats, *args, **kwargs)
        self.fields['appended_instance'].queryset = choice_model.objects.all()

@admin.register(MyModel)
class MyModelAdmin(ImportExportModelAdmin):
    resource_class = SomeResource


    def import_action(self, request, *args, **kwargs):
        super().import_action(self, request, *args, **kwargs)
        form = CustomImportForm(RelatedModel, 
                                import_formats,
                                request.POST or None,
                                request.FILES or None)
Run Code Online (Sandbox Code Playgroud)

现在,当我进入导入页面时,我得到了 …

django-admin django-import-export

6
推荐指数
1
解决办法
1360
查看次数

来自相关模型的 django 管理显示字段

我想在的管理显示中显示ip_addressfromHosts模型HostInfo

# models.py
class Hosts(models.Model):
  host_name = models.CharField(max_length=200, unique=True)
  ip_address = models.GenericIPAddressField(protocol='both', unpack_ipv4=True)
  def __unicode__(self):
    return unicode(self.host_name)
  def hostip(self):
    return unicode(self.ip_address)
Run Code Online (Sandbox Code Playgroud)

我在 admin.py 中有以下内容

# admin.py
class HostInfoResource(resources.ModelResource):

    host = fields.Field(column_name='host',
                              attribute='host',
                              widget=ForeignKeyWidget(Hosts, 'host_name'))
    project = fields.Field(column_name='project',
                                attribute='project',
                                widget=ForeignKeyWidget(Project, 'project_name'))
    env = fields.Field(column_name='env',
                            attribute='env',
                            widget=ForeignKeyWidget(Env, 'env_name'))

    class Meta:
        model = HostInfo
        skip_unchanged = True
        import_id_fields = ('id', 'host','ticket','deployed_by')
        export_order = ('id', 'host', 'nexpose_level','cpus','memory','os',
                        'sudoers_copied', 'sudo_granted', 'extra_disks','app_type','app_name',
                        'vcenter_status','ticket','env','project','deployed_by',
                        'updated_on','created_on')

class HostInfoAdmin(ImportExportModelAdmin):
    resource_class = HostInfoResource
    list_display …
Run Code Online (Sandbox Code Playgroud)

django django-models django-admin django-import-export

6
推荐指数
1
解决办法
4253
查看次数

导入之前解析django-import-export中的字段

我正在使用django-import-export软件包,期望包含位置名称及其经度和纬度的csv文件。

我想从csv解析经度和纬度字段以将其转换为django.contrib.gis.geos.Point对象,以便可以将其输入到Location模型的geom字段中。

# models.py
from django.contrib.gis.db import models
class Location(models.Model):
    name = models.CharField(max_length=200)
    geom = models.PointField(null=True, blank=True)

    def __str__(self):
        return self.name

# admin.py
from .models import Location
from import_export import resources
from import_export.admin import ImportExportModelAdmin

class LocationResource(resources.ModelResource):
    geom = Field()
    latitude = Field()
    longitude = Field()

    class Meta:
        model = Location
        fields = ('id','name', 'latitude', 'longitude')
        exclude = ('geom')
        export_order = ('id', 'name', 'latitude', 'longitude')

    def dehydrate_geom(self, data):
        return Point(data.longitude, data.longitude)

class LocationAdmin(ImportExportModelAdmin):
    resource_class …
Run Code Online (Sandbox Code Playgroud)

python django django-models geodjango django-import-export

6
推荐指数
1
解决办法
452
查看次数

Django 导入导出 - 唯一约束失败

我正在关注有关如何使用 django-import-export 的文档:

https://django-import-export.readthedocs.io/en/latest/getting_started.html#declaring-fields


我有一个如下所示的 excel 表

在此处输入图片说明


我想在这个模型中存储数据:

class ExcelData(models.Model):
    var1 = models.CharField(max_length=200)
    var2 = models.CharField(max_length=200,unique=True)
    var3 = models.CharField(max_length=200)
    var4 = models.CharField(max_length=200)
Run Code Online (Sandbox Code Playgroud)

这是我走了多远:

@admin.register(ExcelData)
class ViewAdmin(ImportExportModelAdmin):
    exclude = ('id',)

class ExcelDataResource(resources.ModelResource):
    var1 = Field(attribute='var1', column_name='Name')
    var2 = Field(attribute='var2', column_name='SAP_ID')
    var3 = Field(attribute='var3', column_name='Abbreviation')
    var4 = Field(attribute='var4', column_name='Max. Capa')

    class Meta:
        model = ExcelData
        import_id_fields = ('var2',)
        exclude = ('id',)
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

在此处输入图片说明


这是 CSV 文件:

http://www.sharecsv.com/s/9d1112392cd7f10378de7fc0811dd0c9/REAL_CSV_SIMPLE.csv



当我尝试像这样导入多行时:

在此处输入图片说明


我收到此错误:


Line number: 2 - UNIQUE constraint failed: myapp_exceldata.var2
b, e, h, k
Traceback (most …
Run Code Online (Sandbox Code Playgroud)

django django-import-export

6
推荐指数
1
解决办法
1121
查看次数