一直在寻找这个答案的几天...在django上是全新的,但是却疯狂地阅读,尽管还不够...
我想构建一个简单的数据输入系统。查尔德(Charfield)获取文件名,我在选择框中显示文件中的行,允许删除行。其余的保存在提交中保存。
model.py
class Inputmodel(models.Model):
data = models.CharField(max_length=128)
views.py
from forms import InputForm
from proj.models import Inputmodel
def ipdb_input_add(request):
if request.method == 'GET':
form = InputForm(request.GET)
if form.is_valid():
dlist = []
if 'filename' in request.GET and request.GET['filename']:
filename = request.GET['filename']
listp = open(filename, 'r').read
with open(filename, 'rt') as f:
myfile = File(f)
for line in myfile:
dlist.append(line)
myfile.close
for d in dlist:
item = Inputmodel(data=d)
item.save
return render_to_response('base.html', { 'form': form })
forms.py
from django import forms
from ip_db.models import Inputmodel
class InputForm(forms.Form):
filename = forms.CharField(max_length=128)
box = forms.MultipleChoiceField(
required=False,
choices=Inputmodel.objects.all().values_list('id', 'ipaddr'),
widget=forms.SelectMultiple(attrs={
'style':'width:200px;height:300px;'
}
))
这不是一项艰巨的任务,我担心我错过了一种更简单的方法。有建议吗?
非常感谢
一些可能会有所帮助的点:
- 您只有在用户使用" get"时才会渲染表单。这样,当您打开URL时,您什么都看不到。
- 您应该使用forms.cleaned_data来获取表单的值。在这里检查
- 如果用户试图上传文件(我不太了解),我将在表单中使用
docfile = forms.FileField(label='Select a file:', help_text='')
。 - 然后获取文件,您可以在视图中使用
data_raw=request.FILES['docfile'].read()
- 最后,更容易的实现将是创建选择文件的第一个形式。提交后,我将用文件的行初始化第二个表格。要在此处初始化表格检查,第二个提交将保存数据。