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

jam*_*gan 3 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
Run Code Online (Sandbox Code Playgroud)

我想知道如何从专辑标题生成 slug。我正在关注一个使用 django 1.8 的教程,它使用正则表达式来实现这个任务。但是通过查看文档,他们引入了一种更简单的方法('')。因此,您能否帮助解释我如何为初学者实施它,不仅在这种情况下而且在可能的情况下全面了解。提前致谢。

小智 9

Django 从您传递给 slug 字段的字符串对象中自动生成 slug。

# Import slugify to generate slugs from strings
from django.utils.text import 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
Run Code Online (Sandbox Code Playgroud)

  • 如果对象标题被修改,此答案会生成一个新的 slug,这可能会导致链接中断。在生成 slug 之前检查 slug 是否存在会更安全 (5认同)