2011-12-08 9 views
0

unique_togetherという制約のあるモデルがあります。unique_together検証エラーを区別する

class Postit(models.Model): 
    """Represents a single post-it.""" 
    x_axis = models.PositiveIntegerField(_('X axis')) 
    y_axis = models.PositiveIntegerField(_('Y axis')) 
    content = models.CharField(_('Content'), max_length=140, default='') 

    class Meta: 
     unique_together = ('x_axis', 'y_axis') 

私は新しいポストイットを作成するためのフォームを使用している場合は、制約がチェックされ、矛盾が生じた場合には、エラーがnon_field_errorsプロパティにリストされています。ファイン。

私の問題は、フォームエラーの種類に応じて別のアクションを開始したいということです。一意の制約エラーがある場合は特定のアクションを、他の種類のエラーの場合は別のアクションが必要です。

私のアプリはいくつかの言語で翻訳されていることを考えれば、制約のためにフォームが無効なのか、別の理由でどうか分かるのですか?

答えて

0

non_field_errorsをチェックする場合は、比較している文字列を翻訳できることにご注意ください。

from django.utils.translation import ugettext_lazy as _ 
if _('Some error text') in self._errors['__all__']: 
    # do something 

これは実際には最も洗練された解決策ではありません。あなたのベスト・ベットは、Model.cleanまたはModel.validate_uniqueであなた自身のunique_togetherの制約を単純に検証し、それに応じて応答することです。