自动填充段塞字段django
我定义了一个模型,数据库中有100多个数据条目。我想自动填充一个slug字段,并看到它显示在管理中,因为为100多个字段添加新条目不是我想做的事情 当我将AutoSlug()字段添加到模型并进行迁移时,它似乎不起作用,自动填充段塞字段django,django,django-models,django-forms,Django,Django Models,Django Forms,我定义了一个模型,数据库中有100多个数据条目。我想自动填充一个slug字段,并看到它显示在管理中,因为为100多个字段添加新条目不是我想做的事情 当我将AutoSlug()字段添加到模型并进行迁移时,它似乎不起作用,prepopulated_fields={'slug':('brand_name',)}在我的admin.py中使用它不起作用,我也尝试在slug上添加默认字段作为模型中所需的字段名,但解决方案无效 他们对如何预先填充slug文件还有其他建议吗 class Brand(models
prepopulated_fields={'slug':('brand_name',)}
在我的admin.py中使用它不起作用,我也尝试在slug上添加默认字段作为模型中所需的字段名,但解决方案无效
他们对如何预先填充slug文件还有其他建议吗
class Brand(models.Model):
brand_name = models.CharField(unique=True, max_length=100, blank=True, default="", verbose_name=_('Brand Name'))
slug = models.SlugField(max_length=255, verbose_name=_('Brand Slug'), default=brand_name)
我想我有一个想法,这将做这项工作,但我不确定这是否是最好的方式做它
我会使用函数。我将创建一个视图,在调用该视图后,该视图将获取所有模型的对象,对它们进行迭代,并使用django.utils.text.slugify
函数填充每个模型的slug字段,并将模型的品牌名称作为值。您可以尝试向品牌类添加一个save方法
from django.utils.text import slugify
class Brand(models.Model):
...
def save(self, *args, **kwargs):
self.slug = slugify(self.brand_name)
super(Brand, self).save(*args, **kwargs)
然后运行:
python manage.py shell
>>>from app.models import Brand
>>>brands = Brands.objects.all()
>>>for brand in brands:
>>> brand.save()
另外,我会将brand_name var更改为just name。我认为最好在品牌模型上添加一个ore_save信号
from django.dispatch import receiver
from django.db.models import signals
from django.contrib.auth import get_user_model
from django.utils.text import slugify
@receiver(signals.pre_save, sender=<model name>)
def populate_slug(sender, instance, **kwargs):
instance.slug = slugify(instance.brand_name)```
从django.dispatch导入接收方
从django.db.models导入信号
从django.contrib.auth导入get\u user\u模型
从django.utils.text导入slugify
@接收器(signals.pre_save,sender=)
def填充_段塞(发送方,实例,**kwargs):
instance.slug=slugify(instance.brand_name)```
请注意,使用bulk_create不会调用模型的save()方法,也不会发送pre_save和post_save信号!那么,如何访问slug呢?它没有在模型对象中显示slug字段。正确的导入来自django.utils.text import slugify