python - 在 Django 中迭代 Slugify。对于多个具有相同名称的对象

标签 python django

如果 slug 已经存在,我希望能够使用 slugify 更改 slug。该站点将有多个名称相同的产品,但当您使用 get_object_or_404 调用该产品时,您将收到错误,因为同时调用两个或多个对象。为了避免这种情况,如果 slug 已经存在,我需要自动增加 slugify。

谁能帮我解决这个问题吗?

class Product(models.Model):
    product_name = models.CharField(max_length=500, blank=True)
    product_description = models.TextField(blank=True)
    company = models.ForeignKey(Company, blank=True, null=True)
    category = models.ForeignKey(Category, blank=True, null=True)
    manufacturer = models.ForeignKey(Manufacturer)
    buy_link = models.URLField(max_length=1000, blank=True)
    product_image_url = models.URLField(max_length=1000, blank=True)
    price = models.CharField(max_length=30, blank=True)
    orginal_price = models.CharField(max_length=30, blank=True)
    stock = models.CharField(max_length=30, blank=True)
    sku = models.CharField(max_length=250, blank=True)
    slug = models.SlugField(max_length=500)
    date_added = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)

    def save(self, *args, **kwargs):
        self.slug = slugify(self.product_name)
        super(Product, self).save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse('products:product_detail', args=[self.slug]) #kwargs={'slug': self.slug}

    def __str__(self):
        return self.product_name  

最佳答案

如果将产品名称和 ID 结合起来会怎样,例如:

def save(self, *args, **kwargs):
    self.slug = slugify("{obj.product_name}-{obj.id}".format(obj=self))
    super(Product, self).save(*args, **kwargs)

或者,您可以生成一个 slug,检查它是否存在,如果存在,则递增并附加计数器 - 示例 herehere .

此外,您可能应该强制执行 slug 唯一性:

slug = models.SlugField(max_length=500, unique=True) 

关于python - 在 Django 中迭代 Slugify。对于多个具有相同名称的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42986243/

相关文章:

django - 为什么 django dumpdata 不包括 django_migrations 表?

python - 将 Pipenv 与 git 子模块一起使用

django - 通用详细信息 View 必须使用对象pk或子弹调用

Python/Django TangoWithDjango 模型和数据库

python - 从 OAuth2 注销 - Google App Engine/Python

python - 可视化高维场箭头?

python - 当我将图像从我的应用程序发送到服务器时发生错误

使用 read_sql_query 时 python 代码终止

django - 在 Django 中提供文件中的原始动态 html 内容?

python - 两个日期之间的 Django ORM 交集