我想创建一个模型,其中我只放入两个字段,其余的是使用API请求生成的,我已经获得了这一代,但我无法以可用的字符串格式获取CharField。 所以在现场是:
name = models.CharField(max_length=250, default='default')
我想通过它来实现:
name = self.name.replace(' ', '+')
movieData = (json.loads(str(urllib2.urlopen('http://www.omdbapi.com/?t=' + name + '&y=&plot=short&r=json').read(),'utf-8')))
movieYear = movieData.get('Year')
将movieYear保存为字段。 提前致谢
答案 0 :(得分:0)
我认为自定义save
可以帮助您完成您的目标。这是一个例子:
class MyModel(models.Model):
name = models.CharField(max_length=250, default='default')
movieData = models.JSONField(blank=True)
movieYear = models.CharField(max_length=250, blank=True)
def save(self, *args, **kwargs):
url = 'http://www.omdbapi.com/?t={}&y=&plot=short&r=json'.format(self.name.replace(' ', '+'))
data = json.loads(str(urllib2.urlopen(url).read(),'utf-8'))
self.movieData = data
self.movieYear = data['Year']
super(MyModel, self).save(*args, **kwargs)
这将允许您对从self.name
属性制作的网址发出请求(用+
替换空格),然后将响应存储在您想要的字段中。
如果您使用此解决方案,则需要注意包含某种错误处理 - 如果提供的名称无效,会发生什么?或者由于某种原因,返回的数据没有Year
密钥?或者API可能只停留了几分钟,因此您的有效请求没有收到响应?
这也将在每次保存时向该API发出请求,这可能会对您的应用程序的速度产生影响。您可以强制自定义save
中的逻辑仅在使用if self.pk is None
创建新实例时执行。