在Django Admin中将csv数据导入数据库 [英] Import csv data into database in Django Admin

查看:443
本文介绍了在Django Admin中将csv数据导入数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图通过在管理员中调整modelform,将csv文件导入数据库:



models.py:

  class Data(models.Model):
place = models.ForeignKey(Places)
time = models.DateTimeField b $ b data_1 = models.DecimalField(max_digits = 3,decimal_places = 1)
data_2 = models.DecimalField(max_digits = 3,decimal_places = 1)
data_3 = models.DecimalField(max_digits = 4,decimal_places = 1)

Forms.py:

  import csv 
class DataImport(ModelForm):
file_to_import = forms.FileField()

class Meta:
model = data
fields =(file_to_import,place)

def save(self,commit = False,* args,** kwargs):
form_input = DataImport
self.place = self.cleaned_data ['place']
file_csv = request.FILES ['file_to_import']
datafile = open(file_csv,'rb')
records = csv.reader(datafile)
在记录中的行:
self.time = line [1]
self.data_1 = line [2]
self.data_2 = line [3 ]
self.data_3 =行[4]
form_input.save()
datafile.close()

Admin.py:

  class DataAdmin(admin.ModelAdmin):
list_display =(place,time)
form = DataImport

admin.site.register(Data,DataAdmin)

但我卡住了试图导入我放在file_to_import字段中的文件。在forms.py中获取AttributeError:'function'object没有属性'FILES'。



我做错了什么?



表单

  class DataInput(forms.Form):
file = forms.FileField()
place = forms.ModelChoiceField(queryset = Place.objects.all())

def save(self):
records = csv.reader(self.cleaned_data [file])
在记录中的行:
input_data = Data()
input_data.place = self.cleaned_data [place]
input_data.time = datetime.strptime(line [1] m /%d /%y%H:%M:%S)
input_data.data_1 = line [2]
input_data.data_2 = line [3]
input_data.data_3 = line [4]
input_data.save()

视图:



@staff_member_required
def import(request):
if request.method ==POST:
form =
如果form.is_valid():
form.save()
success = True
context = {form:form,formInput(request.POST,request.FILES) success:success}
return render_to_response(imported.html,context,
context_instance = RequestContext(request))
else:
form = DataInput b context = {form:form}
return render_to_response(imported.html,context,
context_instance = RequestContext(request))

其余的是这篇文章的一部分:
http://note.harajuku-tech.org/adding-views-to-the-django-admin-beardy-geek


I've tried to import a csv file into a database by tweaking the modelform inside the admin doing this:

models.py:

class Data(models.Model):
    place = models.ForeignKey(Places)
    time = models.DateTimeField()
    data_1 = models.DecimalField(max_digits=3, decimal_places=1)
    data_2 = models.DecimalField(max_digits=3, decimal_places=1)
    data_3 = models.DecimalField(max_digits=4, decimal_places=1)

Forms.py:

import csv
class DataImport(ModelForm):
    file_to_import = forms.FileField()

    class Meta:
        model = Data
        fields = ("file_to_import", "place")

    def save(self, commit=False, *args, **kwargs):
        form_input = DataImport()
        self.place = self.cleaned_data['place']
        file_csv = request.FILES['file_to_import']
        datafile = open(file_csv, 'rb')
        records = csv.reader(datafile)
        for line in records:
            self.time = line[1]
            self.data_1 = line[2]
            self.data_2 = line[3]
            self.data_3 = line[4]
            form_input.save()
        datafile.close()

Admin.py:

class DataAdmin(admin.ModelAdmin):
    list_display = ("place", "time")
    form = DataImport

admin.site.register(Data, DataAdmin)

But i'm stuck trying to import the file i put in "file_to_import" field. Getting AttributeError in forms.py : 'function' object has no attribute 'FILES'.

What i'm doing wrong?

解决方案

After a long search i found an answer: Create a view inside the admin using a standard form

Form:

class DataInput(forms.Form):
    file = forms.FileField()
    place = forms.ModelChoiceField(queryset=Place.objects.all())

    def save(self):
        records = csv.reader(self.cleaned_data["file"])
        for line in records:
            input_data = Data()
            input_data.place = self.cleaned_data["place"]
            input_data.time = datetime.strptime(line[1], "%m/%d/%y %H:%M:%S")
            input_data.data_1 = line[2]
            input_data.data_2 = line[3]
            input_data.data_3 = line[4]
            input_data.save()

The view:

@staff_member_required
def import(request):
    if request.method == "POST":
        form = DataInput(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            success = True
            context = {"form": form, "success": success}
            return render_to_response("imported.html", context,
            context_instance=RequestContext(request))
    else:
        form = DataInput()        
        context = {"form": form}
        return render_to_response("imported.html", context,
        context_instance=RequestContext(request)) 

The rest is part of this post: http://note.harajuku-tech.org/adding-views-to-the-django-admin-beardy-geek

这篇关于在Django Admin中将csv数据导入数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆