class Product(models.Model):
title = models.CharField(max_length=75)
class Deal(models.Model):
product = models.ForeignKey(Product)
slug = models.SlugField(max_length=255, unique=True)
具有与上面类似的基本设置,我想使用其交易的产品标题和交易本身的 id 为每个交易实例生成唯一的 slugs。 IE:"apple-iphone-4s-161"
where 161
是交易的 ID,前面的文本是产品的标题。
为此,我如何覆盖 Deal 模型的 save() 方法来应用它?
当然,您可以简单地覆盖模型上的 save() 方法(或为 post_save 信号制作接收器)。
它会是这样的:
from django.template.defaultfilters import slugify
class Deal(models.Model):
product = models.ForeignKey(Product)
slug = models.SlugField(max_length=255, unique=True)
def save(self, *args, **kwargs):
super(Deal, self).save(*args, **kwargs)
if not self.slug:
self.slug = slugify(self.product.title) + "-" + str(self.id)
self.save()
但这个解决方案的丑陋之处在于它会访问数据库两次(保存两次)。这是因为当创建新的 Deal 对象时,它不会有 id,直到您第一次保存它(并且您对此无能为力)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)