簡體   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