2016-07-16 8 views
2

フォームエラーに問題があります。フォームエラーが表示するフィールド名を変更したい。フォームフィールドエラーメッセージを変更するDjango

models.py

class Sales(models.Model): 
    customer = models.ForeignKey("Customer") 
    ctype = models.ForeignKey("Customer_type", verbose_name="Customer Type") 

forms.py

from django.utils.translation import ugettext_lazy as _ 
class Sales_form(forms.ModelForm): 
    class Meta: 
     model = Sales 
     fields = ('customer','ctype') 
     error_messages = { 
      'ctype' : { 
       'required' : _("Hey yow! this field is required!") 
      } 
     } 

が、エラーがまだ返されます:

{ "CTYPEを":![ "YOWねえ、このフィールドは必須です! "]}

私がこのようにしたいのは、

{お客様のタイプ:["Hey yow!このフィールドは必須です "]}

http://pastebin.com/w6UkjzHF

答えて

1

あなたは、このようなあなたのMeta内のフィールドのラベルを指定することができます!

from django.utils.translation import ugettext_lazy as _ 
class Sales_form(forms.ModelForm): 
    class Meta: 
     model = Sales 
     fields = ('customer','ctype') 
     labels = { 
      'ctype': _('Customer Type'), 
     } 
     error_messages = { 
      'ctype' : { 
       'required' : _("Hey yow! this field is required!") 
      } 
     } 

フォームラベルとしてモデルフィールドのverbose_nameを使用する直接的な方法はありません私の知る限りあなたは_meta属性を使用できますが、

私のタスのかなりのハッキーあなたがまだfieldnameを渡す必要があるからです。

そして、あなたはまた、ラベルを構築することができますがdictionary comprehensionでのdict:

labels = {f.name: f.verbose_name for f in MyModel._meta.get_fields()} 

しかしget_fieldsも何の属性verbose_nameを持っていないManyToManyRelを返すので、これに注意してください。

また、render errorsのdjangoドキュメントの一部を参照すると参考になる場合があります。

あなたは自分のform.errorsの辞書内のキーを変更したい場合は、この方法でこれを行うことができます。

labels = {f.name: f.verbose_name for f in MyModel._meta.get_fields()} 
errors_keys = tuple(form.errors.keys()) 
for k in errors_keys: 
    form.errors[labels[k]] = form.errors[k] 
    del form.errors[k] 

それともform.errors[labels[k]] = form.errors.pop(k)。 また、thisのdictキーの交換に関する質問

+0

ありがとうございます@valen。私はあなたの答えを試みたが、ラベルは動作していないようで、エラーメッセージは同じです。 – aldesabido

+0

あなたの質問をちょっと誤解しているかもしれません。あなたはHTMLページでかなり冗長なラベルをしたいのですか、またはエラーdictのキーを置き換えるだけですか? – valignatev

+0

申し訳ありません。私はちょうどerror dictのキーを置き換えたいです。 – aldesabido

関連する問題