2017-11-11 80 views
0

如果管理員用戶上傳文件(如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

謝謝你的建議!如果管理員用戶發佈相同的數據,我想讓重複項被忽略 –

回答

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

它適用於我!謝謝 ! –

相關問題