这是我的许多“ 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,当用户访问该 URL 时,会将他们带到特定于该处理的页面。我希望能够在 Django Admin 中创建一个处理,并立即获取此 URL,以便我可以将其发送给用户。可以在 TreatmentBase 上使用以下方法创建此 URL:
def get_url(self):
return '{}/{}/'.format(self.URL_PREFIX, self.code)
但是,我不知道如何让这个 URL 显示在 Django Admin 中。我可以想到以下解决方案:
(1) 自定义code
字段的显示,使其成为可点击的 URL。问题:我不知道该怎么做。
(2) 将get_url
方法添加到ModelAdmin.list_display
. 问题:这意味着我必须list_display
为 的每个子模型定义一个单独的模型BaseTreatment
,并且我必须明确列出模型的所有字段,这意味着我每次修改模型时都必须更新它,这违反了 DRY。
(3) 添加一个额外的字段,如下所示:
url = models.URLField(default = get_url)
问题:get_url
是一个实例方法(因为它需要引用该self.code
字段),并且从我阅读有关默认参数的文档来看,它必须是一个没有参数的简单可调用对象。
有什么办法可以完成这个看似简单的任务?