【问题标题】:how to create auto slugfield in ddjango restframework in django like如何在 django 的 django rest 框架中创建自动 slug 字段,例如
【发布时间】:2021-10-05 02:22:29
【问题描述】:
 class AddCategory(admin.ModelAdmin):
   list_display = ['name', 'slug']  
   prepopulated_fields = {'slug': ('name',)}

类 CategorySerializer(serializers.ModelSerializer): 元类: 型号 = 类别 字段 = ['name', 'slug', 'icon'] lookup_field = '蛞蝓'

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    您可以在model 内的save 方法中手动实现

    1. 创建custom_slugify 方法:

      def custom_slugify(slug):
        slug = slug.replace(" ", "-")
        slug = slug.replace(",", "-")
        slug = slug.replace("(", "-")
        slug = slug.replace(")", "")
        slug = slug.replace("؟", "")
        return slug
      
    2. 调用save方法

       def save(self, *args, **kwargs):
         self.slug = custom_slugify(self.name)
         super().save(*args, **kwargs)
      

    【讨论】:

      【解决方案2】:
      from django.utils.text import slugify
      
      class Category(models.Model):
          name = models.CharField(max_length=100)
          slug = models.SlugField(max_length=120)
      
          def save(self, *args, **kwargs):
              if not self.pk:
                  self.slug = slugify(self.name)
              super().save(*args, **kwargs)
      

      覆盖您的保存方法以自动生成您的 slug。

      【讨论】:

        【解决方案3】:

        我正在寻找同样的东西。我的模型上有这个,想把它移到我的序列化器创建方法中。我知道您在问如何使用 DRF 进行操作,但我不确定是否最好将其保留在模型本身上,以防您必须在管理员或类似工具中手动更新。

        from django.db.models.signals import pre_save
        from django.utils.text import slugify
        
        class Software(models.Model):
            name            = models.CharField(max_length=200, unique=True, verbose_name='Software Name')
            slug            = models.SlugField(unique=True, null=True)
            status          = models.BooleanField(default=False, verbose_name='Active')
        
            class Meta:
                verbose_name = ('Software')
                verbose_name_plural = ('Software')
                ordering = ["id", "name"]
        
            def __str__(self):
                return self.name
        
        def pre_save_software(sender, instance, *args, **kwargs):
            slug = slugify(instance.name)
            instance.slug = slug
        
        pre_save.connect(pre_save_software, sender=Software)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-22
          • 1970-01-01
          • 2010-10-24
          • 1970-01-01
          • 2014-08-25
          • 2017-03-04
          相关资源
          最近更新 更多