2012-10-25 46 views
4

我在django模型中有一個名爲schema的字段,該字段通常包含一個相當大的json字符串。有一個默認值(大約2000個字符),我想添加任何新的實例時創建。Django - 在模型中加載大默認值的正確方法

我覺得把一個變量中的models.py轉儲整個東西是不清楚的。在我的模式中加載此默認值的最佳方式是什麼(這是TextField)?

例子:

class LevelSchema(models.Model): 
    user = models.ForeignKey(to=User) 
    active = models.BooleanField(default=False) 
    schema = models.TextField() # Need a default value for this 

我想到這一點。如果我使用json文件在某處存儲默認值,那麼放置它的最佳位置是什麼?顯然,如果它位於文件夾中的同一應用程序中,則更好。

+1

將它置於變量中如此不清楚的是什麼? –

+1

文字相當龐大。因爲它是格式化的JSON文件的一半,我希望將來可編輯。我更喜歡從文件(如fixtures)加載它,只是想知道Django中是否有方法。 –

+0

在這種情況下,它只是關於json,因爲它看起來像一個Python字典,它仍然可以忍受,如果還有其他類型的大型文本,比如說XML/HTML,該怎麼辦?更不用說多行(100秒)。 –

回答

1

該文本相當龐大。因爲它是跨越文件的一半 格式化json,我希望將來可編輯。我更喜歡從文件(如fixtures)加載 ,只是想知道Django中是否存在 方法。

在Django,你有兩個選擇:

  1. 偵聽post_save,而當created是真實的,通過讀取文件設置對象的默認值。

  2. 將默認設置爲可調用(函數),並在該方法中讀取文件(確保關閉後),並返回其內容。

您還可以將數據粘貼到某些k/v存儲區(如redis或memcache)以加快訪問速度。這也會更好,因爲你不會經常打開和關閉文件。

最後,最具限制性的選項是在數據庫上設置一個觸發器來爲您填充。你將不得不將json存儲在數據庫中的某個地方。這種方法的好處是你可以編寫一個django前端來更新json。缺點是它會限制你的應用程序到你決定支持觸發器的那些數據庫。

1

我發現變量的使用不是特別不潔。但是你可以「濫用」所有字段支持的參數default這個事實可以是可調用的。

所以,你會這樣「瘋狂」的事情:

def get_default_json(): 
    json_text = open('mylargevalue.json').read() 
    return json_text 

,然後在你的領域:

schema = models.TextField(default=get_default_json) 

我還沒有嘗試過這樣的事情,但我想它可以工作。

相關問題