2014-09-04 60 views
0

我有一個Django模型,它有一個名爲url的屬性,它在訪問時返回s3上文檔的S3簽名url。登錄URL有過期時間,所以我沒有保存到模型中,它需要在訪問模型時生成。在Django中爲動態生成的url添加字段admin

我想這個動態屬性添加到管理部分,當文件被訪問(但這不是保存到模型中的領域,它是模型上的屬性)

我該怎麼辦呢?

回答

2
  1. 聲明你的屬性在模型上(或者,如果你喜歡,管理員)
  2. 的屬性添加到管理員
  3. readonly_fields屬性的屬性添加到管理員的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無法完美配合。

+0

這正是我想要做的!謝謝 – josephmisiti 2014-09-04 23:35:55

+0

另外值得注意的是readonly_fields必須在字段之前出現 – aris 2016-11-06 22:53:50