这里的一个URL是对于很多“Treatment
”模型的抽象基类(TreatmentA, TreatmentB
等):Django管理:显示对象时,显示包含的字段
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)
但是,我坚持着如何得到这个网址在Django管理显示。我可以想到以下解决方案:
(1)自定义code
字段的显示,以便它变成可点击的URL。 问题:我不知道该怎么做。
(2)将get_url
方法添加到ModelAdmin.list_display
。 问题:这意味着我必须为BaseTreatment
的每个子模型定义一个单独的list_display
,我必须明确列出模型的所有字段,这意味着我必须在每次修改模型时更新它,违反DRY。
(3)添加一个额外的字段是这样的:
url = models.URLField(default = get_url)
问题:get_url
是一个实例方法(因为它需要参照self.code
场),并从我的docs about the default argument的阅读,它只是必须是没有参数的简单可调用的。
任何方式来做这个看似简单的任务?