如何在django 2.0.4中从我的Album模型中自动生成slug

时间:2018-05-20 15:53:11

标签: python django slug

我有一个带有歌曲列表的专辑字段

 class Album(models.Model):
    artist = models.CharField(max_length=250)
    album_title = models.CharField(max_length=250)
    genre = models.CharField(max_length=100)
    album_logo = models.CharField(max_length=1000,blank=True)
    slug = models.SlugField(unique=True)

    def __str__(self):
        return self.album_title               

class Song(models.Model):
    album = models.ForeignKey(Album, on_delete=models.CASCADE)
    artist = models.CharField(max_length=250, blank=True)
    file_type = models.CharField(max_length=10)
    song_title = models.CharField(max_length=100)    

    def __str__(self):
        return self.artist

我想知道如何从专辑标题中生成slu ..我正在使用django 1.8的教程,该教程使用正则表达式来实现此任务。但是通过查看文档,他们引入了一种更简单的方法('')。 所以你能帮我解释一下如何实现它,让初学者不仅可以在这种情况下理解,而且如果可能的话,也可以在整个过程中理解。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

Django会根据传递给Slug字段的字符串对象自动生成Slug。     从django.utils.text导入slugify

class Album(models.Model):
    artist = models.CharField(max_length=250)
    album_title = models.CharField(max_length=250)
    genre = models.CharField(max_length=100)
    album_logo = models.CharField(max_length=1000,blank=True)
    slug = models.SlugField(unique=True)

    def save(self, *args, **kwargs):
        self.slug = slugify(self.album_title)
        super(Album, self).save(*args, **kwargs)

    def __str__(self):
        return self.album_title    


class Song(models.Model):
    album = models.ForeignKey(Album, on_delete=models.CASCADE)
    artist = models.CharField(max_length=250, blank=True)
    file_type = models.CharField(max_length=10)
    song_title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100, unique=True)

    def save(self, *args, **kwargs):
        self.slug = slugify(self.song_title)
        super(Song, self).save(*args, **kwargs)    

    def __str__(self):
        return self.artist