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

How to have a Django model variable relative to another


我是一个尝试新项目的 Django 新手,但我被卡住了:(

我有一个视频模型:

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

我想为每个视频自动生成一个简单的 link 视频缩略图。 我首先尝试在模板中生成它,但发现你不能在 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'

如果您真的需要将其存储在数据库中,那也没关系!您可以尝试覆盖此 class 的 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)