2016-07-09 51 views
0


我是一个Django新手尝试一个新的项目,而我坚持:(如何有一个Django模型变量相对于另一个

我有一个视频型号:

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

,我会就像为每个视频自动生成一个链接到视频缩略图的简单链接 我首先尝试在模板中生成它,但发现你不能在jinja中使用任何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模型上设置属性是一种方法。如果你不需要存储在数据库中这一形象的网址,你可以做到以下几点:

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

相关问题