2016-07-22 1 views
0

だけ明確にする、私は(これは必須フィールドなので)それが検証される前に、フォームに余分なデータを追加したいviews.pyDjangoでModelFormのフィールド名にアクセスするには?

内のフィールドへのアクセスについて聞いてるのよ、とstackexchange上another answerがいるようです私はそうするために新しいフォームを作成しなければならないことを暗示しています。

今、このように私のコードを見て何か:私はダッシュで部品を埋める可能性がどのように

if request.method == 'POST': 
    # create a form instance and populate it with data from the request: 
    form = TestForm(request.POST) 
    data = {} 
    for ---: 
     ---add to data--- 
    comp = Component.objects.get(name = path) 
    data['component'] = comp.id 
    form = TestForm(data) 
    if form.is_valid(): 
     test = form.save(commit = 'false') 
     test.save() 
     return submitTest(request, var) 

答えて

0

これは間違ったことです。プログラムで必須のフィールドを追加する必要はありません。フィールドの価値をすでに知っている場合、それをフォームにまったく含める必要はありません。

別のフォームを作成しなければならないということは、わかりません。その代わりにフォームのMetaクラスでそのフィールドを明示的に除外し、test.save()を呼び出す前にtestオブジェクトの値を設定する必要があります。

編集し、2つの別々の場所からのデータを持っている理由コメントた後、私はまだ本当に理解していないが、多分あなたは、フォームに渡す前に、それらを結合する必要があります

data = request.POST.copy() 
data['myvalue'] = 'myvalue' 
form = MyForm(data) 
+0

フィールドのデータをurlパラメータで渡します。この値は外部キーなので、必要なフィールドにすることが非常に重要です。私が別のフォームを作成することを意味しているのは、ユーザーが見ることのできるフォームではなく、別のフォームセットオブジェクトを作成することだけです。 –

0

私が何を私考え出しました間違っていた私のTestFormモデルフォームでは、フォームに表示したくないので、 'component'フィールドは含めませんでした。その結果、フォームに正しく挿入しても、フォーム検証中に「コンポーネント」データが消去されていました。だから、これを解決するために、私はただ表示するために、私はforms.pyでTestFormをクラスに次の行

widgets = {'component': HiddenInput()} 

を追加し、フォーム上でそれを隠すためにフィールドに「コンポーネント」を追加しました。

関連する問題