Python 如何使Django模型变量相对于另一个模型变量

Python 如何使Django模型变量相对于另一个模型变量,python,html,django,jinja2,Python,Html,Django,Jinja2,我是一个Django新手,正在尝试一个新项目,我被卡住了:( 我有一个视频模型: class Video(models.Model): link = models.CharField(max_length=200) title = models.CharField(max_length=200) 我想为每个视频自动生成一个指向视频缩略图的简单链接。 我首先尝试在模板中生成它,但发现您不能在jinja中使用任何python(是的,我是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'
我怎样才能做到这一点


提前感谢:)

在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)

在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)

物业运作良好,谢谢!@property与常规方法相比有什么变化?您可以像引用字段一样引用模型上的属性,而不是调用方法。(例如,video.image\u源与video.image\u源()。在实践中,属性通常是静态的,对于不需要太多(如果有的话)参数化的简单数据转换来说是常见的。试想一下,如果您有一个存储为CSV的字段,并且希望以列表的形式访问它。您在模型上定义了一个属性,因此当您需要访问数据时,您可以使用该属性而不是原始字段。该属性非常有用,谢谢!@property与常规方法相比有什么变化?您可以像引用字段一样引用模型上的属性,而不是调用方法。(例如,video.image\u源与video.image\u源()。在实践中,属性通常是静态的,对于不需要太多(如果有的话)参数化的简单数据转换来说是常见的。试想一下,如果您有一个存储为CSV的字段,并且希望以列表的形式访问它。您在模型上定义了一个属性,以便在需要访问数据时,使用该属性而不是原始字段。