Python Django Admin:显示对象时,显示包含其中一个字段的URL

Python Django Admin:显示对象时,显示包含其中一个字段的URL,python,django,django-models,django-admin,Python,Django,Django Models,Django Admin,以下是我的许多“处理”模型的抽象基类(processmenta,productmentb,等等): 每个Treatment实例都有一个URL,当用户访问该URL时,会将他们带到特定于该治疗的页面。我希望能够在Django Admin中创建一个治疗,并立即获取此URL,以便将其发送给用户。可以使用以下方法在TreatmentBase上创建此URL: def get_url(self): return '{}/{}/'.format(self.URL_PREFIX, self

以下是我的许多“
处理”模型的抽象基类(
processmenta,productmentb
,等等):

每个
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\u url
方法添加到
ModelAdmin.list\u display
问题:这意味着我必须为
BaseTreatment
的每个子模型定义一个单独的
列表显示
,并且我必须明确列出模型的所有字段,这意味着我必须在每次修改模型时对其进行更新

(3) 添加一个额外字段,如下所示:

    url = models.URLField(default = get_url)
问题:
get\u url
是一个实例方法(因为它需要引用
self.code
字段),从我对的理解来看,它必须是一个简单的无参数可调用的方法


有什么方法可以完成这个看似简单的任务吗?

您可以使用选项2(添加到管理显示),但可以将其添加到 当型号改变时,这可能会减轻您的干燥问题

如果覆盖设置URL属性的方法,则选项3(额外字段)也可以工作。您可以在admin中将该字段设置为readonly,或者仅在
save
方法中设置当前为
None
的值

    url = models.URLField(default = get_url)