2011-03-21 24 views
12

Normal Django Formları kullanırken kendi özel hata iletilerini nasıl ayarlayacağımı biliyorum. Ancak mevcut bir modele dayanan Django Formu ne olacak? model ve formda aşağıdaki düşünün:Django, Modeller ve Formlar: "Bu alan gereklidir" iletisini değiştir

Class MyModel(models.Model): 
    name = models.CharField(max_length='30') 

Class MyForm(forms.ModelForm): 
    Class Meta: 
     model = MyModel 

Ben mesajı böyle bir form oluşturmak ve bunu yayınlamayı denerseniz "Bu alan gereklidir" belirir. Ama nasıl değiştirilir? Tabii ki böyle bir şey yapabileceğini:

Class MyForm(forms.ModelForm): 
    model = forms.CharField(error_messages = {'required': "something..."}) 
    Class Meta: 
     model = MyModel 

Ama belgelere göre, max_length nitelik korunmaz ve form tanımını açıkça yazmak zorunda. Model Formların amacının aynı kodu iki kez yazmamaktan kaçınacağını düşündüm. Yani tüm formu yeniden yazmadan özel hata mesajını değiştirmenin kolay bir yolu olmalı. Mesajım "Alan adı" gerekli "gibi görünüyorsa temel olarak benim için yeterli olacaktır.

Lütfen

Yardım edin.

cevap

29
class MyForm(forms.ModelForm): 
    class Meta: 
      model = MyModel 

    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     self.fields['name'].error_messages = {'required': 'custom required message'} 

     # if you want to do it to all of them 
     for field in self.fields.values(): 
      field.error_messages = {'required':'The field {fieldname} is required'.format(
       fieldname=field.label)} 
+0

Teşekkür ederim, bu iyi görünüyor. Ancak, aynı kodu iki kez yazmayı, ancak aslında daha uzun ve çirkin olan başka bir kod yazmayı ihmal etmediğinizi hissettim;) Yine de, en azından büyük formlarda bazı çalışmalarda bulunacaksınız, tekrar teşekkürler. – tobik

+0

Sanırım her biri kendi başına. Tüm 'gerekli' mesajları değiştirmeniz gerekiyorsa, bu şimdiye kadar en temiz olanıdır. Genelde her şeyde kullandığım __init__ aramasını saymazsanız, daha uzun olduğunu düşünmüyorum. –

+2

Eğer bir "geçersiz" hata ve don alırsanız [bir gizemli 'KeyError'] (http://stackoverflow.com/questions/7463159/django-form-is-valid-keeps-throwing-keyerror) alacağınızı unutmayın. Bunun için bir mesaj ver. –

0

Saha niteliklerini çalışma zamanında, __init__ yönteminde değiştirebilirsiniz.