2011-12-08 51 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.cleanModel.validate_unique中的unique_together約束,並做出相應的響應。