1
我有一個產品和公司模型,其中包含slu for以獲得更好的url詳細視圖。在產品和公司保存到數據庫後,我已經使用pre_save信號來保存slu save。我已經寫不保存蛞蝓,所以當我發佈的產品形式的代碼,我得到關於塞在保存產品和公司後立即保存slug
這裏的錯誤是我的代碼
class Product(models.Model):
name = models.CharField(max_length=200, unique=True, blank=False, null=False)
company = models.ForeignKey('Company', related_name='products', blank=True, null=True, on_delete=models.SET_NULL)
website = models.URLField(unique=True)
slug = models.SlugField(unique=True)
class Meta:
verbose_name= 'Product'
verbose_name_plural= 'Products'
def __str__(self):
return self.name
def hits(self):
self.hits += 1
self.save(update_fields=['hits'])
class Company(models.Model):
name = models.CharField(max_length=200, unique=True, blank=False, null=False)
slug = models.SlugField(unique=True)
description = models.CharField(max_length=400)
editor = models.ForeignKey(User, related_name='company')
# product = models.ForeignKey(Product, related_name='company')
def get_absolute_url(self):
return reverse("products:view-company", kwargs={"slug": self.slug})
def create_slug(instance, new_slug=None):
slug = slugify(instance.name)
if new_slug is not None:
slug = new_slug
qs = Company.objects.filter(slug=slug).order_by('-id')
if qs.exists():
new_slug = "%s-%S" %(slug, qs.first().id)
return create_slug(instance, slug=new_slug)
return slug
def pre_save_slug_receiver(sender, instance, *args, **kwargs):
if not instance.slug:
instance.slug = create_slug(instance)
from django.db.models.signals import pre_save
pre_save.connect(pre_save_slug_receiver, sender=Company)
def create_slug(instance, new_slug=None):
slug = slugify(instance.name)
if new_slug is not None:
slug = new_slug
qs = Product.objects.filter(slug=slug).order_by('-id')
if qs.exists():
new_slug = "%s-%S" %(slug, qs.first().id)
return create_slug(instance, slug=new_slug)
return slug
def pre_save_slug_receiver(sender, instance, *args, **kwargs):
if not instance.slug:
instance.slug = create_slug(instance)
from django.db.models.signals import pre_save
pre_save.connect(pre_save_slug_receiver, sender=Product)
感謝您的解決方案。這對我來說看起來很複雜,因爲我只是初學者。我將不得不花更多的時間來理解這一點。再次感謝 – milan
@米蘭哈,在這種情況下,我會稍微更新我的答案。 –
這是一個給我工作。再次感謝。我正在學習文檔,您提到的鏈接以及您的解決方案以更深入地瞭解。謝謝 – milan