0

このシンプルなモデルで

class Publisher(models.Model):
    name = models.CharField(max_length = 40)
    website = models.URLField()

    def __unicode__(self):
        return self.name

とモデルフォーム

class PublisherForm(ModelForm):

    class Meta:
        model = Publisher

更新されたモデル

class PublisherForm(ModelForm):
    error_css_class = "error"   #class is applied if the field throws an error.
    required_css_class = "required" #outputs the cell with the class if the field is required

    def __init__(self, *args, **kwargs):
        super(PublisherForm, self).__init__(*args, **kwargs)
        self.fields.keyOrder = ['name', 'website']

    class Meta:
        model = Publisher

self.fields.keyOrderは、エラーメッセージの順序には影響しません。フィールドの順序を変更するだけです。

form.as_tableによって生成されるフィールドの順序は、モデルで宣言されている順序です。

このコードをシェルで実行しました

from booksapp import models
>>> f = models.PublisherForm({})
>>> f.is_valid()
False
>>> f.as_table()
u'<tr class="required error"><th><label for="id_name">Name:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input id="id_name" type="text" name="name" maxlength="40" /></td></tr>\n<tr class="required error"><th><label for="id_website">Website:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input id="id_website" type="text" name="website" maxlength="200" /></td></tr>'
>>> f.errors
{'website': [u'This field is required.'], 'name': [u'This field is required.']}
>>> 

ここでは、モデルに応じてhtmlの順序は正しいですが、エラーの順序は正しくありません。名前が最初に来るべきだと思います。

これは、インラインではなくフォームの上にエラーを出力する必要がある場合に問題になります。

エラーメッセージの順序をモデルのフィールドと同じにする方法は?エラーメッセージを上部に表示する必要がある場合はどうしますか?

4

1 に答える 1

1

フォームのデータを調べてフィールドの順序を取得してから、エラーディクショナリの適切な要素にアクセスする必要があります。

于 2012-04-22T03:37:39.777 に答える