Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自动填充段塞字段django_Django_Django Models_Django Forms - Fatal编程技术网

自动填充段塞字段django

自动填充段塞字段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

我定义了一个模型,数据库中有100多个数据条目。我想自动填充一个slug字段,并看到它显示在管理中,因为为100多个字段添加新条目不是我想做的事情

当我将AutoSlug()字段添加到模型并进行迁移时,它似乎不起作用,
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