Treatment
これは、多くの " " モデル (TreatmentA, TreatmentB
など)の抽象基本クラスです。
class TreatmentBase(models.Model):
URL_PREFIX = '' # child classes define this string
code = shared.models.common.RandomCharField(length=6)
class Meta:
abstract = True
各Treatment
インスタンスには URL があり、ユーザーがアクセスすると、その処理に固有のページに移動します。Django Admin で治療を作成し、すぐにこの URL を取得して、ユーザーに送信できるようにしたいと考えています。この URL は、TreatmentBase で次のメソッドを使用して作成できます。
def get_url(self):
return '{}/{}/'.format(self.URL_PREFIX, self.code)
ただし、この URL を Django Admin に表示する方法に行き詰まっています。次の解決策を考えることができます。
(1) フィールドの表示をカスタマイズしてcode
、クリック可能な URL にします。問題: これを行う方法がわかりません。
get_url
(2)メソッドを に追加しModelAdmin.list_display
ます。問題: これはlist_display
、 の子モデルごとに個別に を定義する必要BaseTreatment
があり、モデルのすべてのフィールドを明示的にリストする必要があることを意味します。つまり、モデルを変更するたびに更新する必要があり、DRY に違反します。
(3) 次のようにフィールドを追加します。
url = models.URLField(default = get_url)
問題:get_url
はインスタンス メソッドであり (フィールドを参照する必要があるため)、デフォルトの引数に関するドキュメントをself.code
読んだところ、引数のない単純な callable である必要があります。
この一見単純なタスクを実行する方法はありますか?