您可以在不调用 save( ) 的情况下更新模型实例吗?

问题描述 投票:0回答:1

我正在从事一个需要独特的鼻涕虫的项目。这些 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

python django django-models model
1个回答
0
投票

如果您想使用 update 方法来防止使用 save 方法更新模型的所有字段,您可以在

update_fields
中使用
save()
参数。 它将更新只需要的字段:

instance.field1='some value'
instance.field2='some other value'
instance.save(update_fields=['field1','field2'])
© www.soinside.com 2019 - 2024. All rights reserved.