2016-07-09 9 views
0


にDjangoのモデル変数の相対を持っている私は、新しいプロジェクトをしようとDjangoの初心者です、と私は立ち往生しています:(どのように別の

を私はビデオのモデルがあります:

class Video(models.Model): 
    link = models.CharField(max_length=200) 
    title = models.CharField(max_length=200) 

を、私なり 私は最初にテンプレートでそれを生成しようとしましたが、ジンジャでPythonを使用できないことが判明しました(はい、私はDjangoを初めて使用しています)。余分な変数を直接モデルに入れようとしましたが、何も働かなかった:

class Video(models.Model): 
    link = models.CharField(max_length=200) 
    title = models.CharField(max_length=200) 

    image_source = 'http://img.youtube.com/vi/'+ str(link.split('=')[1]) +'/maxresdefault.jpg' 

どうすればこの作品を作成できますか?

ありがとうございます。

答えて

2

Djangoモデルのプロパティを設定するのも一つの方法です。あなたは、データベースにこの画像のURLを格納する必要がない場合は、次の操作を行うことができます:

class Video(models.Model): 
    link = models.CharField(max_length=200) 
    title = models.CharField(max_length=200) 

    @property 
    def image_source(self): 
     return 'http://img.youtube.com/vi/'+ str(self.link.split('=')[1]) +'/maxresdefault.jpg' 

あなたが本当にデータベースでこれを格納する必要がある場合、それはあまりにも素晴らしいです!次のように、このクラスのsave()メソッドをオーバーライドできます。

class Video(models.Model): 
    link = models.CharField(max_length=200) 
    title = models.CharField(max_length=200) 
    image_source = models.CharField(max_length=250, blank=True) 

    def save(self, *args, **kwargs): 
     # ensure image_source is always updated 
     self.image_source = 'http://img.youtube.com/vi/'+ str(self.link.split('=')[1]) +'/maxresdefault.jpg' 

     super(Video, self).save(*args, **kwargs) 
+0

このプロパティは素晴らしい結果でした。 @propertyは通常のメソッドから何に変わりますか? – AimiHat

+1

メソッドを呼び出すのではなく、フィールドと同じようにモデルのプロパティを参照できます。 (例:video.image_sourceとvideo.image_source())。実際には、プロパティは一般的に静的であり、多くの(もしあれば)パラメータ化を必要としない単純なデータ変換では一般的です。あなたがCSVとして保存したフィールドを持っていて、それをリストとしてアクセスする場合は、モデルにプロパティを定義するので、データにアクセスする必要がある場合は、生のフィールドの代わりにプロパティを使用します。 – Xopherus

関連する問題