excel中2000多行只添加了一行,同时上传到django admin

Posted

技术标签:

【中文标题】excel中2000多行只添加了一行,同时上传到django admin【英文标题】:Only one row is added from 2000+ rows in excel, while uploading it into django admin 【发布时间】:2021-08-03 16:05:43 【问题描述】:

我的 excel 文件中有大约 2000 多行,在上传选定的文件时,它只显示添加到 Django 管理员的最后一行。如何解决?

这是我的 import.html(HTML 文件)

% extends 'base.html' %

% block content %
  <form method="post" enctype="multipart/form-data">
    % csrf_token %
    <input type="file" name="myfile">
    <button type="submit">Upload</button>
  </form>
% endblock %

views.py

def simple_upload(request):
    if request.method == 'POST':
        product_resource = ProductResource()
        dataset = Dataset()
        new_product = request.FILES['myfile']

        if not new_product.name.endswith('xlsx'):
            messages.info(request,'Wrong Format')
            return render(request, 'Upload.html')
        
        imported_data = dataset.load(new_product.read(),format='xlsx')
        for data in imported_data:
            value = Product(
                data[0],
                data[1],
                data[2],
                data[3],
                data[4],
                data[5],
                data[6]
            )
        value.save()
    return render(request,'import.html')

resources.py

from import_export import resources
from .models import Product

class ProductResource(resources.ModelResource):
    class Meta:
        model = Product

admin.py

admin.site.register(Product)
class PersonAdmin(ImportExportModelAdmin):
    pass

urls.py

urlpatterns = [
    path('',views.simple_upload),
]

【问题讨论】:

【参考方案1】:

保存在循环之外,所以它只会保存一次,它将是循环中的最后一项,试试:

    for data in imported_data:
        value = Product(
            data[0],
            data[1],
            data[2],
            data[3],
            data[4],
            data[5],
            data[6]
        )
        value.save()

【讨论】:

非常感谢@sirwill98

以上是关于excel中2000多行只添加了一行,同时上传到django admin的主要内容,如果未能解决你的问题,请参考以下文章

SQL如何一次性添加多条记录

Oracle一列的多行数据拼成一行显示

关于Oracle,在一行中个别字段多行显示。

Excel隐藏多行,如何一次全部展开显示或取消隐藏

EXCEL把多列数据变成一行的函数

怎样将多行Excel内容合并成一行