有没有办法在将文件更改为django中的合适模型后将文件上传到数据库?
问题描述:
如果管理员用户上传文件(如csv文件格式等),我想制作管理页面,更改合适的模型后保存在数据库中。例如,假设用户上传以下文件。有没有办法在将文件更改为django中的合适模型后将文件上传到数据库?
year month survived ticket
2002 08 1 cn-101
2001 09 0 cn-102
2002 11 1 cn-103
我想什么要提出的是,当用户上传管理页面文件,将其更改文件的模型如下图所示,并保存在数据库中。
class SampleModel(models.Model):
year = models.IntegerField()
month = models.IntegerField()
survived = models.booleanField()
ticket = models.CharField()
有没有办法在Django做到这一点?
答
可以继承save_model
方法如下
# admin.py
from django.contrib import admin
class SampleAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
file_path = request.FILES['myfile']
with open(file_path) as f:
for line in f:
year, month, survived, ticket = f.split()
SampleModel.objects.create(year=year,
month=month,
survived=bool(int(survived)),
ticket=ticket)
super().save_model(request, obj, form, change)
+0
它适用于我!谢谢 ! –
有没有内置在Django的管理应用程序,以这种方式工作的功能。但编写一个视图可以让你从csv文件创建模型实例,这相当容易。这是一种api视图。你需要考虑的是如果你两次发布相同的数据会发生什么。如果您向数据库添加更多行,或者应该忽略重复项。是否应该有错误信息? –
谢谢你的建议!如果管理员用户发布相同的数据,我想让重复项被忽略 –