python - Django import_export 在提交时解码 ascii 代码?
问题描述
我试图从包含特殊 ASCII 字符的 csv 文件上传数据并将其导入模型,例如“Big Fish Äö√Ñ√¥s”,django import_export 会给我一个错误,内容如下:
导入的文件编码错误:“utf-8”编解码器无法解码位置 511 中的字节 0x80:无效起始字节。
当我选择文件并单击提交时会显示此错误。
我试图实现的功能将采用包含数千行数据的 csv 文件,我想知道是否有一种方法可以遍历每一行级别并逐行清理数据。
我试过实现 before_import_row 方法,但似乎没有被调用。
我的 admin.py: '''ptyhon
from django.contrib import admin
from import_export.admin import ExportActionModelAdmin, enter code hereImportExportMixin, ImportMixin
from import_export.resources import ModelResource
from .forms import CustomConfirmImportForm, CustomImportForm
from .models import Author, Book, Category, Child, EBook
class ChildAdmin(ImportMixin, admin.ModelAdmin):
pass
class BookResource(ModelResource):
class Meta:
model = Book
def for_delete(self, row, instance):
return self.fields['name'].clean(row) == ''
class BookAdmin(ImportExportMixin, admin.ModelAdmin):
list_filter = ['categories', 'author']
resource_class = BookResource
class CategoryAdmin(ExportActionModelAdmin):
pass
class AuthorAdmin(ImportMixin, admin.ModelAdmin):
pass
admin.site.register(Book, BookAdmin)
admin.site.register(Category, CategoryAdmin)
admin.site.register(Author, AuthorAdmin)
'''
我的模型.py
'''Python
[![import random
import string
from django.core.exceptions import ValidationError
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
birthday = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
def full_clean(self, exclude=None, validate_unique=True):
super().full_clean(exclude, validate_unique)
if exclude is None:
exclude = \[\]
else:
exclude = list(exclude)
if 'name' not in exclude and self.name == '123':
raise ValidationError({'name': "'123' is not a valid value"})
class Category(models.Model):
name = models.CharField(
max_length=100,
unique=True,
)
def __str__(self):
return self.name
class Book(models.Model):
name = models.CharField('Book name', max_length=100)
author = models.ForeignKey(Author, blank=True, null=True, on_delete=models.CASCADE)
author_email = models.EmailField('Author email', max_length=75, blank=True)
imported = models.BooleanField(default=False)
published = models.DateField('Published', blank=True, null=True)
published_time = models.TimeField('Time published', blank=True, null=True)
price = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
categories = models.ManyToManyField(Category, blank=True)
def __str__(self):
return self.name
class Parent(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Child(models.Model):
parent = models.ForeignKey(Parent, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
def __str__(self):
return '%s - child of %s' % (self.name, self.parent.name)
class Profile(models.Model):
user = models.OneToOneField('auth.User', on_delete=models.CASCADE)
is_private = models.BooleanField(default=True)
class Entry(models.Model):
user = models.ForeignKey('auth.User', on_delete=models.CASCADE)
class Role(models.Model):
user = models.OneToOneField('auth.User', on_delete=models.CASCADE, null=True)
class Person(models.Model):
role = models.ForeignKey(Role, on_delete=models.CASCADE)
class WithDefault(models.Model):
name = models.CharField('Default', max_length=75, blank=True,
default='foo_bar')
def random_name():
chars = string.ascii_lowercase
return ''.join(random.SystemRandom().choice(chars) for _ in range(100))
class WithDynamicDefault(models.Model):
name = models.CharField('Dyn Default', max_length=100,
default=random_name)
class WithFloatField(models.Model):
f = models.FloatField(blank=True, null=True)
class EBook(Book):
"""Book proxy model to have a separate admin url access and name"""
class Meta:
proxy = True][1]][1]
''' 这是 csv 文件,你可以看到它包含奇怪的字符。
这是我单击提交时的错误:
最终,我想知道是否有一种方法可以在我单击提交按钮时清理每一行的数据。看来,一旦发现文件包含奇怪的字符并且甚至没有命中我的代码,引擎盖下的 import_export 就会抛出错误消息。谢谢你。
解决方案
看到格式 xlxs 没有遇到这个问题。
推荐阅读
- c# - 提交验证失败后未重新填充多选类别字段
- java - Java 需要巧妙地替换字符串中的部分字符串?
- matlab - 为什么我的线对象在应用程序设计器 Matlab 中被注册为双重对象?
- flutter - 在 ListView.builder 上显示来自 firestorage 的图像
- angular - ngFor中的Angular 6 Computed Property绑定不起作用
- algorithm - 输出 AMS Sketch 和 Count Sketch 算法的区别
- python-3.x - 在图像外部添加颜色条而不缩小它
- c# - 有什么方法可以为 c# .NET 中的特定数据库表自动生成 BLL 类?
- mysql - 显示字符百分比
- csv - 使用 CSV 更新现有迁移失败