我正在从事一个需要独特的鼻涕虫的项目。这些 slugs 是使用对象名称在自定义 save() 方法中动态创建的。
class SlugMixin(models.Model):
def save(self, *args, **kwargs):
slug = striptags(self.name)
self.slug = slugify(slug)
super(SlugMixin, self).save(*args, **kwargs)
class Meta:
abstract = True
名称不是唯一的,因此可能有多个相同的 slug。所以我正在使用的解决方案是将实例的 id 附加到 post_save 中的 slug 中。这里的问题是尝试用 id 更新 slug。需要再次调用 save()。
def ensure_unique_slug(sender, instance, created, **kwargs):
if created and Person.objects.filter(slug=instance.slug).count() > 1:
instance.slug = instance.slug + '-{}'.format(instance.id)
instance.save()
使更新无用。有没有办法在不调用 save() 的情况下更新 slug
如果您想使用 update 方法来防止使用 save 方法更新模型的所有字段,您可以在
update_fields
中使用 save()
参数。
它将更新只需要的字段:
instance.field1='some value'
instance.field2='some other value'
instance.save(update_fields=['field1','field2'])