2016-09-07 1 views
0

私はちょうどジャンゴ - TinyMCEのを設定し、それを行うには、私のフォームにいくつかの変更を行いました。しかし、私のフォームはもはや正しいエラーメッセージを出力しなくなりました。ジャンゴ - TinyMCEのウィジェットは、正しいエラーメッセージを出力しない

マイ形式:

TITLE_LENGTH_ERROR = "This title is too long, please make it 200 characters or less." 
TITLE_EMPTY_ERROR = "You’ll have to add a title." 
TEXT_EMPTY_ERROR = "Please enter some text." 
NO_CATEGORY_ERROR = "Please select a category." 
NO_CITY_ERROR = "Please select a city." 


class ArticleForm(ModelForm): 
    text = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30})) 
    class Meta: 
     model = Article 
     fields = ['title', 'text', 'categories', 'city'] 
     widgets = {'title': forms.TextInput(attrs={ 
      'placeholder': 'Enter a descriptive title'}), 
      'categories': forms.CheckboxSelectMultiple(choices=Category.CATEGORY_CHOICES), 
      'city': forms.RadioSelect(choices=City.CITY_CHOICES), 
     } 
     error_messages = { 
      'title': { 
       'max_length': TITLE_LENGTH_ERROR, 
       'required': TITLE_EMPTY_ERROR, 
      }, 
      'text': { 
       'required': TEXT_EMPTY_ERROR, 
      }, 
      'categories': { 
       'required': NO_CATEGORY_ERROR, 
      }, 
      'city': { 
       'required': NO_CITY_ERROR, 
      } 
     } 

テスト:

from articles.models import Article, Category, City 
from articles.forms import (
    ArticleForm, 
    TITLE_LENGTH_ERROR, 
    TITLE_EMPTY_ERROR, 
    TEXT_EMPTY_ERROR, 
    NO_CATEGORY_ERROR, 
    NO_CITY_ERROR, 
) 


class ArticleFormTest(TestCase): 

    def setUp(self): 
     self.user = User.objects.create(username='testuser') 
     self.user.set_password('12345') 
     self.user.save() 
     self.client.login(username='testuser', password='12345') 

    def test_form_validation_for_blank_inputs(self): 
     form = ArticleForm(data={'title': '', 'text': '', 'categories': '', 'city': '', 'author': self.user}) 
     self.assertFalse(form.is_valid()) 

     self.assertEqual(
      form.errors['text'], 
      [TEXT_EMPTY_ERROR] 
     ) 

トレースバック:

(venv) Robins-MacBook-Pro:togethere robin$ python manage.py test articles/ 
Creating test database for alias 'default'... 
.F.................... 
====================================================================== 
FAIL: test_form_validation_for_blank_inputs (articles.tests.test_forms.ArticleFormTest) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/Users/robin/work/2016-06-04_togethere/togethere/articles/tests/test_forms.py", line 36, in test_form_validation_for_blank_inputs 
    [TEXT_EMPTY_ERROR] 
AssertionError: ['This field is required.'] != ['Please enter some text.'] 

---------------------------------------------------------------------- 
Ran 22 tests in 4.171s 

FAILED (failures=1) 
Destroying test database for alias 'default'... 

がどのように私は、フォームの出力正しいエラーメッセージ作るのですか?また、他のウィジェットと同様にtinymceウィジェットを宣言することは可能ですか?

+0

は、あなたがそう 'テキストのように実際のCharFieldです上のエラーメッセージを入れて試してみましたけれども、その後のMetaクラス自身のフィールドを上書きしません。うまくいけば、これは、Djangoの洞察力のビットとテストを提供します= forms.CharField?(ウィジェット= TinyMCEは(attrsに= { 'colsの':80 '行':30})、error_messages = { '必要':TEXT_EMPTY_ERRORは}) ' –

+0

@MichaelPlattは私がいなかったことがあれば、テストを修正します。!あなたはこれを答えとして提出することができ、私はそれを次のようにマークします:) – Flobin

+0

クール。うまくいきました。私は以下でより詳細な答えを与えました。 –

答えて

1

に役立つかもしれない、もう少し説明やカップルのリンクは、この上でいくつかの光を当てるので、[OK]をクリックします。公式のDjangoのドキュメント(https://docs.djangoproject.com/en/1.10/ref/forms/fields/)には、フォームフィールドの検証とカスタムエラーメッセージの使用例があります。

言われていること
text = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30}), error_messages = { 'required': TEXT_EMPTY_ERROR}) 

、別のDjangoのドキュメント(https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/)はモデルフォームのメタクラスでカスタムerror_messagesを作成示していますerror_messagesはあなたが関連付けられたエラーメッセージを表示したいフィールド内で定義する必要があります。最初の行はうまく動作していますが、最初に投稿した方法でエラーメッセージを作成したいと思った場合は、そのドキュメントに従ってみてください。ドキュメントの[デフォルトのフィールドを上書きする]セクションでは、あなたが行っていることに非常によく似た例を示していますので、間違ったことが分かるはずです。フィールドと好奇心のうち!!

関連する問題