在Django admin中添加动态生成URL的字段
我有一个Django模型,这个模型里有一个叫做 url
的属性。当你访问这个属性时,它会返回一个在S3上的文档的签名网址。签名网址是有有效期的,所以我并不把它保存到模型里,而是每次访问模型时都需要生成。
我想在管理后台中添加这个动态属性,当访问文档时显示出来(但这个属性并不是保存到模型里的字段,而是模型上的一个属性)。
我该怎么做呢?
1 个回答
2
- 在模型(或者说管理员界面)上声明你的属性。
- 把这个属性添加到管理员的
readonly_fields
属性里。 - 把这个属性添加到管理员的
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
一起用的时候,可能不会完全正常工作。