2017-01-05 6 views
0

pathというCharFieldという2つのモデルがあります。それらのうちの1つでは、/で終わらせ、もう1つでは/とする必要があります。また、このフィールドは一意で索引を付ける必要があります。私は何も変わりませんがsuper()への呼び出しの周りtry exceptを試みたDjangoは管理コンソールで一意のチャーフィールドを検証します

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. 

:ここで私は今のところ思い付いたソリューションです。管理コンソールにデータの検証を指示して、保存してクラッシュする前に一意のエラーではないので、管理者が変更できるようにしますか?

TL; DRカスタム正規表現の検証に失敗した場合、管理コンソールでcharfeildの上に赤い線が表示されるようにするにはどうすればよいですか?

答えて

1

adminでカスタム検証を行うには、特定のロジックをコーディングするためのカスタムフォームが必要です。 djangoのsave()メソッドは、ユーザーフォームに何も返さないため、検証を行うのには適していません。 django docにはhave your own form for django adminの方法を確認してください。またhow to validate a django formを確認してください。

+0

解決しました。 MyMigrationが台無しだった。 delete()への検証を追加すること(それに割り当てられた外部キーを変更すること) –

関連する問題