Django 导入导出有错误"Tablib has no format 'None' or it is not registered"



我正在尝试在我的应用程序中实现csv导入,但我有这个错误,Tablib has no format 'None' or it is not registered.

我正在使用python 3.5和Django 2.2。 我用 python 2.7 和 Django 1.8 尝试了相同的代码,效果很好。我的代码有问题吗?

我的模型:

class Stock(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE, blank=True)
item_name = models.CharField(max_length=50, blank=True, null=True)
quantity = models.IntegerField(default='0', blank=False, null=True)
receive_quantity = models.IntegerField(default='0', blank=True, null=True)
receive_by = models.CharField(max_length=50, blank=True, null=True)
issue_quantity = models.IntegerField(default='0', blank=True, null=True)
issue_by = models.CharField(max_length=50, blank=True, null=True)
issue_to = models.CharField(max_length=50, blank=True, null=True)
phone_number = models.CharField(max_length=50, blank=True, null=True)
created_by = models.CharField(max_length=50, blank=True, null=True)
reorder_level = models.IntegerField(default='0', blank=True, null=True)
last_updated = models.DateTimeField(auto_now_add=False, auto_now=True)
def __str__(self):
return self.item_name

Resources.py

from import_export import resources
from .models import Stock, Person
class StockResource(resources.ModelResource):
class Meta:
model = Stock

Views.py:

from .resources import StockResource

def upload(request):
if request.method == 'POST':
stock_resource = StockResource()
dataset = Dataset()
new_stock = request.FILES['myfile']
imported_data = dataset.load(new_stock.read())
result = stock_resource.import_data(dataset, dry_run=True)  # Test data import
if not result.has_errors():
stock_resource.import_data(dataset, dry_run=False)  # Run import
return render(request, 'csv_import.html')

csv_import.html

<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="myfile"><br><br>
<button type="submit">Upload</button>
</form>

csv_import.csv

1,phone,1,0,9,0,9,9,9,,ssaine,0,2020-06-11,
2,computer,2,0,9,0,9,9,9,9,ssaine,0,2020-08-11,

可以尝试以下几点:

imported_data = Dataset().load(new_stock.read().decode(), format='csv', headers=False)
print(imported_data)

如果这不起作用,请准确验证从new_stock.read()返回的内容。 它是有效的 csv 数据吗? 在服务器上进行测试之前,可以在本地对此进行测试。

对于那些有标头的人,省略 headers 选项,让 django 自己选择标头,它也解决了不简单地保存到数据库中的问题。 所以使用

imported_data = Dataset().load(new_stock.read().decode(), format='csv')

不要忘记安装 django-import-export 模块,并在设置、已安装的应用程序中包含应用程序"导入-导出"。

最新更新