在Django admin中添加动态生成URL的字段

0 投票
1 回答
504 浏览
提问于 2025-04-19 22:19

我有一个Django模型,这个模型里有一个叫做 url 的属性。当你访问这个属性时,它会返回一个在S3上的文档的签名网址。签名网址是有有效期的,所以我并不把它保存到模型里,而是每次访问模型时都需要生成。

我想在管理后台中添加这个动态属性,当访问文档时显示出来(但这个属性并不是保存到模型里的字段,而是模型上的一个属性)。

我该怎么做呢?

1 个回答

2
  1. 在模型(或者说管理员界面)上声明你的属性。
  2. 把这个属性添加到管理员的 readonly_fields 属性里。
  3. 把这个属性添加到管理员的 fields 或者 fieldsets 属性里。

举个例子:

class MyModel(models.Model):
    # fields here

    def s3_url(self):
        return ... # some calculated URL

class MyAdmin(admin.Admin):
    readonly_fields = ('s3_url',)
    fields = (..., 's3_url')

其实不管 s3_url 是用 @property 装饰器声明的属性,还是一个可以调用的函数,效果都是差不多的。唯一需要注意的是,有些可以自定义行为的属性,比如 short_description,在和 @property 一起用的时候,可能不会完全正常工作。

撰写回答