2012-10-16 68 views
0

我有一個簡單的模型類保存和更新JSON數據Django模型

class Talk(models.Model): 
    url = models.URLField() 
    user = models.ForeignKey(User) 
    category = models.ForeignKey(Category) 
    description = models.TextField(blank=True, max_length=500) 
    title = models.TextField(blank=True) 

和我連接到透過oEmbed API從提交的URL獲取數據

def get_oembed_info(self): 
    params = {'url': self.url, 'format': 'json'} 
    fetch_url = 'http://api.embed.ly/1/oembed?%s' % urllib.urlencode(params) 
    result = urllib.urlopen(fetch_url).read() 
    result = json.loads(result) 
    KEYS = ['title', 'type', 'url', 'description', 'provider_url', 'provider_name', 'width', 'height', 'html', 'thumbnail_url', 'author_url'] 
    for key in KEYS: 
    if result.has_key(key): 
     setattr(self, key, result[key]) 

def save(self): 
    self.get_oembed_info() 
    super(Talk, self).save() 

這是確定以添加新從管理員談話,但當我嘗試更新同樣的談話後沒有任何改變。

也是這種方式很好的獲取數據並將其存儲在數據庫中。

感謝

+0

由於服務器響應沒有更改,未來更新可能沒有任何更改? – dokkaebi

+0

@dokkaebi - 這是真的,但假設我想將標題或廣告更多描述更改爲模型字段 –

回答

1

每次保存,你從服務器獲取數據並覆蓋模型領域。您可以在取回之前檢查它是否是新對象:

def save(self, *args, **kwargs): 
    if not self.pk: 
     self.get_oembed_info() 
    super(Talk, self).save(*args, **kwargs) 
+0

非常感謝dokkaebi,此解決方案非常棒。 –