【问题标题】:Save and update json data to django models将 json 数据保存并更新到 django 模型
【发布时间】:2012-10-16 20:21:13
【问题描述】:

我有一个简单的模型类

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()

可以从管理员添加一个新的谈话,但是当我稍后尝试更新同一个谈话时,没有任何变化。

这种方式也可以很好地获取数据并将其存储在数据库中。

谢谢

【问题讨论】:

  • 由于服务器响应没有改变,未来更新可能没有任何变化?
  • @dokkaebi - 这是真的,但假设我想将标题或广告更多描述更改为模型字段

标签: django json django-models


【解决方案1】:

每次保存时,您都会从服务器获取数据并覆盖您的模型字段。您可以在获取之前检查它是否是新对象:

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

【讨论】:

  • 非常感谢 dokkaebi,这个解决方案很棒。
猜你喜欢
  • 1970-01-01
  • 2016-07-07
  • 2020-10-04
  • 2019-12-05
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 2016-08-12
  • 2020-07-11
相关资源
最近更新 更多