2

一直在寻找这个答案的日子......在 Django 是全新的,但疯狂地阅读它,虽然还不够......

我想建立一个简单的数据输入系统。CharField 采用文件名,我在选择框中显示文件中的行,允许删除行。其余的在提交时保存。

模型.py

class Inputmodel(models.Model):
    data = models.CharField(max_length=128)

视图.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 }) 

表格.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;'
                   }       
               ))     

这不是一项艰巨的任务,我担心我错过了一种更简单的方法。有什么建议吗?

非常感谢

4

1 回答 1

0

可能有帮助的几点:

  1. 仅当用户使用“GET”时才呈现表单。这样,当您打开网址时,您什么也看不到。
  2. 您应该使用 forms.cleaned_data 来获取表单的值。在这里检查
  3. 如果用户尝试上传文件(我不太明白),我会docfile = forms.FileField(label='Select a file:', help_text='')在表单中使用。
  4. 然后获取可以data_raw=request.FILES['docfile'].read()在视图中使用的文件
  5. 最后,一个更简单的实现可能是创建用于选择文件的第一个表单。提交后,我将使用文件的行初始化第二个表单。在这里初始化表单检查第二次提交将保存数据。
于 2013-07-11T17:08:17.670 回答