Rapor oluşturmak için kullanılan sorguyu denetleyen alanlar için (başlangıç tarihi, bitiş tarihi ...) bir Django formu (yeni formlar) kullanan bir web raporum var. Sorun şu ki, sayfanın formun başlangıç değerlerini (ilişkisiz) kullanarak çalışması gerektiğidir, ancak is_valid() işlevini aramadıkça clear_data alanına erişemiyorum. Ancak is_valid(), ilişkisiz formlarda her zaman başarısız olur.Unbound formdan form değerleri nasıl kullanılır?
Django'nun formları, düzenlenmemiş bir formun HTML görüntülemekten başka bir şey için gerçekten yararlı olmadığı şekilde düzenleme verisi kullanımıyla tasarlanmış gibi görünüyor. Ben Örneğin
: (bu ilişkisiz olduğundan) bu bir GET ise başarısız olur
if request.method == 'GET':
form = MyForm()
else:
form = MyForm(request.method.POST)
if form.is_valid():
do_query(form.cleaned_data['start_date'], form.cleaned_data['end_date'])
is_valid() ve bunu yaparsam:
if request.method == 'GET':
form = MyForm()
do_query(form.cleaned_data['start_date'], form.cleaned_data['end_date'])
else:
form = MyForm(request.method.POST)
if form.is_valid():
do_query(form.cleaned_data['start_date'], form.cleaned_data['end_date'])
İlk arama için do_query, form_cleaned_data'daki istisnaları tetikler; bu geçerli bir alan değildir, çünkü is_valid() çağrılmamıştır. Ben böyle bir şey yapmak zorunda gibi görünüyor: is
if request.method == 'GET':
form = MyForm()
do_query(form['start_date'].field.initial, form['end_date'].field.initial)
else:
form = MyForm(request.method.POST)
if form.is_valid():
do_query(form.cleaned_data['start_date'], form.cleaned_data['end_date'])
, bir proteine bağlı veya ilişkisiz bir biri arasındaki formun değerleri almak için ortak bir arayüz yoktur.
Bunu yapmanın daha temiz bir yolu var mı?
Evet, ancak sonra varsayılan değerler formla tanımlanmaz (alan bildirimlerindeki initial = değeri gibi). Formu birden çok yerde kullanırsanız, varsayılan değerlerinizi tekrar etmeniz gerekir. – davidavr