新手怀疑,请需要一些帮助

时间:2012-10-22 22:25:53

标签: django-models django-forms django-views django-1.4

一直在寻找这个答案的日子......在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;'
                   }       
               ))     

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

非常感谢

1 个答案:

答案 0 :(得分:0)

可能有所帮助的一些要点:

  1. 仅在用户使用“GET”时呈现表单。这样,当您打开网址时,您看不到任何内容。
  2. 您应该使用forms.cleaned_data来获取表单的值。查看here
  3. 如果用户尝试上传文件(我不太了解),我会在表单中使用docfile = forms.FileField(label='Select a file:', help_text='')
  4. 然后,要获取文件,您可以在视图中使用data_raw=request.FILES['docfile'].read()
  5. 最后,更简单的实现方法是创建第一个选择文件的表单。提交后,我会用文件的行初始化第二个表单。初始化表单检查here第二次提交将保存数据。