我有以下models.py:
from django.db import models
class User_Language(models.Model):
user = models.CharField(max_length=100)
language = models.CharField(max_length=100)
这就是form.py:
from django import forms
class file_upload_form(forms.Form):
title = forms.CharField(max_length=100)
file = forms.FileField()
这个Txt数据文件,用标签分隔:
Lucas Rezende Python
Fabricio Django
Pappacena Python
我创建了这个视图,它基本上呈现了html文件来处理Txt文件:
from django.shortcuts import render, redirect
from forms import file_upload_form
from models import User_Language
from myfreecomm.settings import MEDIA_ROOT
def upload_file(request):
'''
This view handles the file upload
'''
if request.method == 'POST':
form = file_upload_form(request.POST, request.FILES)
if form.is_valid():
handle_uploaded_file(request.FILES['file'])
filename = file['filename']
f = open('%s%s' % (MEDIA_ROOT, filename), 'r')
for line in f.readline().split('\t'):
table = User_Language(user = line[0], language = line[1])
table.save()
return redirect('/success_upload/')
else:
form = file_upload_form()
return render(request, 'upload/upload.html', locals())
def success(request):
return render(request, 'upload/sucess.html', locals())
此时我无法弄清楚如何将名为data.txt
的此Txt文件插入到表User_Language
中。
我试着在Google上查看回复,但无法弄清楚如何完成回复。
有人可以向我澄清这个问题吗?
提前致谢!
答案 0 :(得分:1)
首先,您应该决定是否需要保存上传的文件。如果您只需要访问上传的文件内容,则可以访问上传文件的文件对象,如:
if form.is_valid():
doc_fo = form.cleaned_data['file']
for line in doc_fo.readline().split('\t'):
...
UPD。
如果你想将它加载到db中,你应该在你的模型中使用BinaryField,如果你使用django 1.6。如果您使用早期版本的django,则应在模型中使用TextField并使用Base64编码/解码文件内容
模型中的二进制字段:
x = ModelX()
doc_fo = form.cleaned_data['file']
x.file = doc_fo.read()
x.save()
模型中的TextField:
import base64
x = ModelX()
doc_fo = form.cleaned_data['file']
x.file = base64.b64encode(doc_fo.read())
x.save()
稍后获取内容:
file_content = base64.b64decode(x.file)
答案 1 :(得分:0)
这是一个简单的模型,因此您可以在数据库级别执行此操作。这可能不是一旦你的模型发展的最佳实践,但如果你使用south进行迁移,它可能没问题。
因此,您应该访问控制台访问sqlite并发出以下命令:
.separator "\t"
.import sample.csv user_language
select * from user_language; --> you should now have data here.
在我的例子中,db文件和csv文件位于同一文件夹中。