Hatalar zaten doğrulanmış forma enjekte edilsin mi?


99

form.FormKullanıcı girdi değerlerini doğruladıktan sonra , bunları daha sonraki işlemler için ayrı bir (harici) işleme geçiriyorum. Bu harici süreç, potansiyel olarak değerlerde başka hatalar bulabilir.

Bu hataları önceden doğrulanmış forma enjekte etmenin bir yolu var mı, böylece olağan form hatası görüntüleme yöntemleri aracılığıyla görüntülenebilsinler (veya daha iyi alternatif yaklaşımlar var mı)?

Bir öneri, harici işlemeyi form doğrulamasına dahil etmekti, bu ideal değildir, çünkü harici süreç yalnızca doğrulamaktan çok daha fazlasını yapar.

Yanıtlar:


95

Form._errorsstandart bir sözlük gibi ele alınabilir. ErrorListSınıfı kullanmak ve mevcut listeye hatalar eklemek iyi bir form olarak kabul edilir :

from django.forms.utils import ErrorList
errors = form._errors.setdefault("myfield", ErrorList())
errors.append(u"My error here")

Alan dışı hatalar eklemek istiyorsanız, yerine django.forms.forms.NON_FIELD_ERRORS(varsayılan olarak "__all__") kullanın "myfield".


3
"_Errors" adı form sınıfına dahil olması gerektiğini öne sürdüğü için bu biraz rahatsız edici görünüyor. Bunu Django'da yapmanın standart yolu bu mu? OP ile benzer bir durumdayım: Kullanıcıların veritabanında benzersiz olması gereken yeni bir ad sağladığı bir formum var. Bir çarpışma olursa, formu bir hata ile geri göndermek isterim, ancak veritabanını eklemeyi gerçekten deneyene kadar bilmeyeceğim. (Teoride, doğrulayıcı veritabanını kontrol edebilir, ancak bu kokuyor ve yarışa meyilli.)
Weeble

1
@scompt: teşekkürler, düzeltildi. @Weeble: _errorsadına rağmen genel form API'sinin bir parçasıdır; bir docs bağlantısı için insin'in cevabına bakın.
John Millikin

18
Bu inanılmaz derecede pitonik değil. Form.errors ['alanım']. Append (my_error) veya form.add_error ('myfield', my_error) uygulamak ne kadar zordu? Mevcut uygulamada hata için çok yer var (kelime anlamı yok).
Michael

2
Çoğunlukla tamamlandı. Ek bir not, is_valid () çağrılmadıysa, form._errors = ErrorDict ()
jacob

12
@Michael - tavsiyenizi almış gibi görünüyor ... Django Dev - Form.add_error (alan, hata)
Clayton


14

6
Görünüşe göre 1.6 geliştirme sonrası sürümünde bir add_errorişlev ekliyorlar
brianmearns

Ve şimdi Django 1.7'nin resmi bir add_error işlevi var: docs.djangoproject.com/en/1.7/ref/forms/api/…
Danilo Cabello

0

Belirli bir alana hata ekleyin:

form.add_error('fieldName', 'error description')

** Alan olmayanlara hata ekleyin **

form.add_error(None, 'error description')
#Only pass None instead of field name
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.