【问题标题】:Import csv file data from django admin从 django admin 导入 csv 文件数据
【发布时间】:2012-10-22 06:31:54
【问题描述】:

我想创建将 csv 数据导入数据库。 我在我的应用程序上添加了导入按钮。覆盖 app/change_list。按钮将被正确添加。我想添加单击“导入”按钮文件的操作将上传到同一模板页面。并且数据将被保存。 我参考链接

Importing data into django from CSV via admin interface

Extending Django Admin for data import

但我不了解管理流程。我想像 image_file 上传一样在弹出窗口中打开文件上传选项。

【问题讨论】:

  • 是的,但是那个问题没有任何答案,所以我创建了我的单独问题

标签: django import


【解决方案1】:

在 admin cookbook 网站上有一个非常好的上传 CSV 示例:

https://books.agiliq.com/projects/django-admin-cookbook/en/latest/import.html

代码如下:

class CsvImportForm(forms.Form):
csv_file = forms.FileField()

@admin.register(Hero)
class HeroAdmin(admin.ModelAdmin, ExportCsvMixin):
...
change_list_template = "entities/heroes_changelist.html"

def get_urls(self):
    urls = super().get_urls()
    my_urls = [
        ...
        path('import-csv/', self.import_csv),
    ]
    return my_urls + urls

def import_csv(self, request):
    if request.method == "POST":
        csv_file = request.FILES["csv_file"]
        reader = csv.reader(csv_file)
        # Create Hero objects from passed in data
        # ...
        self.message_user(request, "Your csv file has been imported")
        return redirect("..")
    form = CsvImportForm()
    payload = {"form": form}
    return render(
        request, "admin/csv_form.html", payload
    )

【讨论】:

  • 抱歉删除了一个旧帖子,但它实际上是如何进行上传的,您是否在那里创建自己的对象并调用 save 方法?
  • 是的,看看我在哪里评论了Create Hero objects from passed in data 那就是你会打电话给Hero(....).save()的地方
【解决方案2】:

我编写并使用了以下代码:

import csv
def importcsv(request):
     if request.method == "POST":
        form = DataInput(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('Url/')
     else:
        form = DataInput()
        context = {"form": form}
        return render_to_response("imported.html", context,context_instance=RequestContext(request))

并且在创建的具有表单的 import.html 文件中

<form enctype="multipart/form-data" action="" method="post" id="importform">

【讨论】:

    猜你喜欢
    • 2011-04-27
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    相关资源
    最近更新 更多