2015-05-02 44 views
0

我为我的一个模型使用DateTimeField。它有一个custom validator,检查,没有日期将被接受。如何显示Django管理员中的DateTimeField的自定义验证错误?

如果我提供的日期在将来,错误会正确提出,但管理员显示Bitte eine Liste mit Werten eingeben.Enter a list of values.)而不是我的验证错误消息。

我怎样才能让管理员显示我自己的验证错误信息呢?

这里是我的自定义验证(full source in this gist)的相关部分:

@deconstructible 
class DateValidator(): 

    # … 

    def __call__(self, value): 
    """ 
    Check *value* against the stored *date*. 

    If *date* is callable, it's return value is used, if not, it is used 
    directly. 

    """ 
    # get min/max date 
    try: 
     date = self.date() 
    except TypeError: 
     date = self.date 
    # check 
    if self.equal and value == date: 
     return 
    if self.after: 
     if value > date: 
     return 
    else: 
     if value < date: 
     return 
    raise ValidationError(
     self.message, code='invalid', params={ 
     'value': value.strftime(self.DATETIME_FORMAT), 
     'date': date.strftime(self.DATETIME_FORMAT) 
     } 
    ) 

我用它是这样的:

@python_2_unicode_compatible 
class Article(models.Model): 

    # … 

    pub_date = models.DateTimeField(
    'Veröffentlichungsdatum', blank=True, null=True, 
    validators=[DateValidator(timezone.now)], 
    help_text=("…") 
) 
+0

将相关代码添加到帖子中wo uld有助于调试,特别是你如何调用验证器。 – Wolph

回答

1

可以在forms.py 提高forms.ValidationError以下是一个示例:

class LoginForm(forms.Form): 
    username = forms.CharField() 
    password = forms.CharField(widget=forms.PasswordInput()) 

    def clean_username(self): 
     username = self.cleaned_data.get("username") 
     try: 
      user = User.objects.get(username=username) 
     except User.DoesNotExist: 
      raise forms.ValidationError("Are you sure you are registered? We cannot find this user.") 
     return username 
+0

谢谢,但我宁愿在模型(定义)上设置我的验证器。有没有办法创建一个自定义窗体,只是为了显示我的'ValidationError'的消息? – Brutus

+0

如果我没有误解你说的话:你想要一个自定义表单来显示验证错误。如果是这样,我们刚刚做到了。 LoginForm是一个自定义窗体,仅显示验证错误。 – user248884

+0

这就是我所不需要做的。我创建了一个自定义验证器,并将其用于我的**模型定义**(而不是定制表单) - 并且它可以工作。问题是:在Django管理员中,不是来自验证程序的消息,而是显示了一条不同的错误消息,尽管识别出了“ValidationError”。 – Brutus

相关问题