有没有办法在将文件更改为django中的合适模型后将文件上传到数据库?

有没有办法在将文件更改为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做到这一点?

+0

有没有内置在Django的管理应用程序,以这种方式工作的功能。但编写一个视图可以让你从csv文件创建模型实例,这相当容易。这是一种api视图。你需要考虑的是如果你两次发布相同的数据会发生什么。如果您向数据库添加更多行,或者应该忽略重复项。是否应该有错误信息? –

+0

谢谢你的建议!如果管理员用户发布相同的数据,我想让重复项被忽略 –

可以继承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

它适用于我!谢谢 ! –