繁体   English   中英

将CharField用作字符串

[英]Use CharField as a string

我想创建一个模型,其中我只放入两个字段,其余的是使用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保存为字段。 提前致谢

我认为自定义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属性制作的URL发出请求(用+替换空格),然后将响应存储在您想要的字段中。

如果您使用此解决方案,您将需要注意包括某种错误处理 - 如果提供了无效的名称会发生​​什么? 或者返回的数据由于某种原因没有Year键? 或者API可能只停留了几分钟,因此您的有效请求没有收到响应?

这也将在每次保存时向该API发出请求,这可能会影响您的应用程序的速度。 您可以强制自定义save逻辑仅在使用if self.pk is None时创建新实例时执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM