2017-01-05 24 views
0

我有2个模型CharField调用path。其中一个我需要强制它以/结束,另一个除/之外。此外这个字段必须是唯一的和索引的。这里是我想出了迄今为止的解决方案:这改变不了什么Django验证管理控制台中的唯一charfield

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 exceptsuper()但是。如何告诉管理控制台验证数据,以便在保存和崩溃之前得到一个不唯一的错误,以便管理员可以更改它?

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

回答

1

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

+0

解决了它。 MyMigration搞砸了。你如何将验证添加到delete()(改变分配给它的外键) –