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

时间:2014-09-04 22:43:37

标签: python django django-models django-forms django-admin

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

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

我该怎么做?

1 个答案:

答案 0 :(得分:2)

  1. 在模型上声明您的属性(或者,如果您愿意,还可以在管理员处)
  2. 将该属性添加到admin
  3. readonly_fields属性中
  4. 将该属性添加到admin
  5. fieldsfieldsets属性中

    EG:

    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完美配合。