2017-01-05 44 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()(改變分配給它的外鍵) –