如何在 django 2.0.4 中从我的相册模型自动生成 slug
How to auto generate slug from my Album model in django 2.0.4
我有一个包含歌曲列表的专辑字段
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
我想知道如何从专辑名称生成 slug。我正在关注使用 django 1.8 的教程,该教程使用正则表达式来实现此任务。但是通过查看文档,他们引入了一种更简单的方法('')。
那么,您能否帮助解释一下我如何实施它,让初学者不仅在这种情况下,而且在可能的情况下都能全面理解。
提前致谢。
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
要使用信号,
这是 tutorial 我找到解决方案的地方
models.py
导入这些东西
from django.utils.text import slugify
from django.dispatch import receiver
from django.db.models.signals import pre_save
在你的模型下添加这个。
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
@receiver(pre_save, sender=Store)
def store_pre_save(sender, instance, *args, **kwargs):
if not instance.slug:
instance.slug = slugify(instance.song_title)
Make sure it's under the class and the def,
otherwise you will get an error
我有一个包含歌曲列表的专辑字段
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
我想知道如何从专辑名称生成 slug。我正在关注使用 django 1.8 的教程,该教程使用正则表达式来实现此任务。但是通过查看文档,他们引入了一种更简单的方法('')。 那么,您能否帮助解释一下我如何实施它,让初学者不仅在这种情况下,而且在可能的情况下都能全面理解。 提前致谢。
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
要使用信号, 这是 tutorial 我找到解决方案的地方
models.py
导入这些东西
from django.utils.text import slugify
from django.dispatch import receiver
from django.db.models.signals import pre_save
在你的模型下添加这个。
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
@receiver(pre_save, sender=Store)
def store_pre_save(sender, instance, *args, **kwargs):
if not instance.slug:
instance.slug = slugify(instance.song_title)
Make sure it's under the class and the def, otherwise you will get an error