Django在管理控制台

时间:2017-01-05 18:58:11

标签: python django

我有2个模型,CharField名为path。其中一个我需要强制它以/结束,而另一个除/之外的其他任何东西。此字段也必须是唯一的并且已编入索引。这是我到目前为止提出的解决方案:

Dir模式(必须以' /'结尾)

#   The path for sorting, e.g. /stuff/00-1/. Must be unique and is indexed for performance.
path = models.CharField(max_length=75, unique=True, db_index=True, blank=False, validators=RegexValidator(regex=r'^/[A-Za-z0-9/-_]+/$', message="Please enter a valid Dir Path")) 
...   
def save(self, *args, **kwargs):
    #   If the path does not end in "/" add it.
    if not self.path.endswith("/"):
        self.path += "/"
    if not self.path.startswith("/"):
        self.path = "/" + self.path
    #  print the result
    print("Saving path {}".format(self.path))
    super(Dir, self).save(*args, **kwargs)  # Call the "real" save() method.

我在try except的呼叫周围尝试了super()但是没有任何变化。如何告诉管理控制台验证数据,以便在保存和崩溃之前得到一个非唯一的错误,以便管理员可以更改它?

TL; DR 如果自定义正则表达式验证失败,如何让红线显示在管理控制台中的charfeild上方?

1 个答案:

答案 0 :(得分:1)

对于admin中的自定义验证,您需要一个自定义表单才能编写特定逻辑。 django中的save()方法永远不是一个做验证的好地方,因为它不会向用户表单返回任何内容。检查django doc如何have your own form for django admin。另请检查how to validate a django form