スラッグが既に存在する場合、slugifyを使用してスラッグを変更したいと考えています。このサイトには同じ名前の複数の製品がありますが、get_object_or_404を使用して製品を呼び出すと、2つ以上のオブジェクトが一度に呼び出されるため、エラーが発生します。これを避けるために、スラグが既に存在する場合、スラグを自動的にインクリメントする必要があります。DjangoでSlugifyを繰り返します。同じ名前の複数のオブジェクトについては、
誰もがこれを手伝ってくれますか?
def save(self, *args, **kwargs):
self.slug = slugify("{obj.product_name}-{obj.id}".format(obj=self))
super(Product, self).save(*args, **kwargs)
それとも、あなたはそれが存在するかどうかを確認して、ない場合は、増分および追加、スラグを生成することができます:あなたは、両方の製品名およびID、のようなものを組み合わせた場合はどう
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
素晴らしいそれが働きました。 –