如何在Django Admin中进行数据导入和导出
Django Admin内置了功能强大的数据导入和导出工具,方便管理数据。下面将介绍如何在Django Admin中进行数据导入和导出。
首先,在models.py中定义需要导入和导出的数据模型:
from django.db import models class MyModel(models.Model): name = models.CharField(max_length=50) description = models.TextField() created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) def __str__(self): return self.name
接着,在admin.py中注册这个模型,并定义数据导入和导出的函数:
from django.contrib import admin from django.http import HttpResponse from django.utils.encoding import smart_str import csv from .models import MyModel class MyModelAdmin(admin.ModelAdmin): list_display = ('name', 'description', 'created_at', 'updated_at') def export_as_csv(self, request, queryset): response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = 'attachment; filename=my_model.csv' writer = csv.writer(response, csv.excel) response.write(u'\ufeff'.encode('utf8')) header_row = [ smart_str(u"ID"), smart_str(u"Name"), smart_str(u"Description"), smart_str(u"Created At"), smart_str(u"Updated At"), ] writer.writerow(header_row) for obj in queryset: row = [ smart_str(obj.id), smart_str(obj.name), smart_str(obj.description), smart_str(obj.created_at), smart_str(obj.updated_at), ] writer.writerow(row) return response export_as_csv.short_description = u"Export Selected as CSV" def import_csv(self, request, *args, **kwargs): if request.method == "POST": csv_file = request.FILES["csv_file"] data_set = csv_file.read().decode('utf-8') io_string = io.StringIO(data_set) # Process the data for row in csv.reader(io_string, delimiter=',', quotechar='"'): _, created = MyModel.objects.update_or_create( id=row[0], name=row[1], description=row[2], created_at=row[3], updated_at=row[4] ) self.message_user(request, "Your csv file has been imported") return redirect("..") return render(request, "import_csv.html", {"opts": self.model._meta}) import_csv.short_description = "Import CSV file" admin.site.register(MyModel, MyModelAdmin)
在这个例子中,我们定义了两个函数:
-
export_as_csv: 将选择的数据导出为CSV文件,以逗号分隔的文本文件。
-
import_csv: 将CSV文件导入到数据库中。
接着,在templates中创建一个html文件,用于文件上传:
{% extends 'admin/base.html' %} {% block content %} <h1>Import CSV for {{ opts.verbose_name_plural }}</h1> <form action="" method="post" enctype="multipart/form-data"> {% csrf_token %} <input type="file" name="csv_file"> <button type="submit">Import</button> </form> {% endblock %}
最后,在Django Admin中就可以看到我们新增的导入和导出功能了。在MyModel列表页面,选择需要导出的数据,点击"Export Selected as CSV"按钮,即可将数据导出为CSV文件。同样,在MyModel列表页面,点击"Import CSV file"按钮,可以上传CSV文件,将数据导入到数据库中。
至此,已完成了在Django Admin中进行数据导入和导出的步骤。
相关文章