が自動的に入力された固定長のランダムな識別子であるべきフィールドを持つモデルがありますこの実装で参照フィールドのデフォルトの機能が
def save(self, *args, **kwargs):
if not self.pk:
while Post.objects.filter(identifier=self.identifier).exists():
self.identifier = get_random_string_fixed()
super().save(*args, **kwargs)
問題はget_random_string_fixed
がsave()
方法でハードコードされていることである。そのような値が既に存在する場合、私は、Saveメソッドでそれを再生成します。ある時点で、このフィールドに別のデフォルト関数を選択することにした場合は、いくつかの場所でそれを変更する必要がありますが、これは悪い習慣です。
関数名をハードコーディングせずに、モデルのメソッドのフィールドのdefault
属性に割り当てられた関数を参照する方法はありますか?
'identifier_default'という名前の関数を作成し、それを代わりに使用します。実際の機能を好きな機能に委譲することができます。 – Selcuk
ありがとう、これは本当にオプションですが、私は 'class.field.default'のようなものを介して取得する方法があることを願っています。 – BartoNaz
なぜ 'while'は' get_random_string_fixed() 'の関数の中に置かれませんか? –