2

この答えを何日も探していました... Djangoではまったく新しいですが、十分ではありませんが、猛烈に読んでいます...

簡単なデータ入力システムを構築したい。CharField はファイル名を取り、ファイル内の行を選択ボックスに表示して、行を削除できるようにします。残りは送信時に保存されます。

model.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」を使用する場合にのみ、フォームをレンダリングします。そうすれば、URLを開いたときに何も表示されません。
  2. フォームの値を取得するには、forms.cleaned_data を使用する必要があります。ここをチェック
  3. ユーザーがファイルをアップロードしようとした場合 (よくわかりませんでした) docfile = forms.FileField(label='Select a file:', help_text='')、フォームで使用します。
  4. data_raw=request.FILES['docfile'].read()次に、ビューで使用できるファイルを取得します
  5. 最後に、おそらくより簡単な実装は、ファイルを選択するための最初のフォームを作成することです。送信後、ファイルの行で 2 番目のフォームを初期化します。フォームの初期化については、こちらを確認してください。2 回目の送信でデータが保存されます。
于 2013-07-11T17:08:17.670 に答える