【发布时间】:2013-07-04 10:27:03
【问题描述】:
这是我的许多“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。 问题:这意味着我必须为BaseTreatment 的每个子模型定义一个单独的list_display,并且我必须明确列出模型的所有字段,这意味着我必须每次修改模型时都更新它,违反 DRY。
(3) 像这样添加一个额外的字段:
url = models.URLField(default = get_url)
问题:get_url 是一个实例方法(因为它需要引用self.code 字段),根据我对docs about the default argument 的阅读,它必须是一个不带参数的简单可调用对象。
有什么方法可以完成这个看似简单的任务?
【问题讨论】:
标签: python django django-models django-admin