0

私は単純なモデルクラスを持っています

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)

そして、送信された URL からデータを取得するために 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()

管理者から新しいトークを追加しても問題ありませんが、後で同じトークを更新しようとしても何も変わりません。

また、この方法でデータを取得してDBに保存することもできます。

ありがとう

4

1 に答える 1

1

保存するたびに、サーバーからデータを取得し、モデル フィールドを上書きします。フェッチする前に、それが新しいオブジェクトかどうかを確認できます。

def save(self, *args, **kwargs):
    if not self.pk:
        self.get_oembed_info()
    super(Talk, self).save(*args, **kwargs)
于 2012-10-17T07:26:55.280 に答える