Python 在Django admin中为动态生成的url添加字段

Python 在Django admin中为动态生成的url添加字段,python,django,django-models,django-forms,django-admin,Python,Django,Django Models,Django Forms,Django Admin,我有一个Django模型,它有一个名为url的属性,当访问该属性时,会返回S3上文档的S3签名url。签名URL已过期,因此我不会保存到模型,它需要在访问模型时生成 我想在访问文档时将此动态属性添加到管理部分(但这不是保存到模型中的字段,而是模型上的属性) 我该怎么做 在模型上声明您的属性(或者,如果您愿意,声明管理员) 将属性添加到管理员的readonly\u字段属性中 将属性添加到管理员的字段或字段集属性中 例如: 无论s3\u url是使用@property装饰器声明的一个属性,还是仅仅是

我有一个Django模型,它有一个名为
url
的属性,当访问该属性时,会返回S3上文档的S3签名url。签名URL已过期,因此我不会保存到模型,它需要在访问模型时生成

我想在访问文档时将此动态属性添加到管理部分(但这不是保存到模型中的字段,而是模型上的属性)

我该怎么做

  • 在模型上声明您的属性(或者,如果您愿意,声明管理员)
  • 将属性添加到管理员的
    readonly\u字段
    属性中
  • 将属性添加到管理员的
    字段
    字段集
    属性中
  • 例如:


    无论
    s3\u url
    是使用
    @property
    装饰器声明的一个属性,还是仅仅是一个可调用的属性,都不应该有什么区别。唯一需要注意的是,一些可调用的属性,如允许您自定义行为的
    short\u description
    ,不能与
    @property

    完美配合使用。同样值得注意的是,只读字段必须位于字段之前
    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')