我有一个简单的模型类
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以从提交的网址获取数据
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 :(得分:1)
每次保存时,都会从服务器获取数据并覆盖模型字段。您可以在获取之前检查它是否是新对象:
def save(self, *args, **kwargs):
if not self.pk:
self.get_oembed_info()
super(Talk, self).save(*args, **kwargs)