Django formset保存()在数据库上写入新对象?

6bc51xsx  于 2023-01-10  发布在  Go
关注(0)|答案(1)|浏览(116)

所以我有我的模型:

class MyModel(models.Model):
    name = models.CharField(_('Name'), max_length=80, unique=True)
    ...

    def save(self, *args, **kwargs):
        if MyModel.objects.count() >= 5:
            raise ValidationError("Can not have more than 5 MyModels!")
        super().save(*args, **kwargs)  # Call the "real" save() method.

数据库中已有5个来自MyModel的对象。我有一个页面,可以使用表单集同时编辑所有对象。当我更改其中一个或多个对象时,将收到验证错误“不能有5个以上的MyModel!"。为什么会发生这种情况?我以为表单集应该编辑现有对象,但它似乎正在写入一个新对象并删除旧对象。
当我对数据库执行www.example.com()时,到底发生了什么formset.save?我必须删除保存()方法吗?

v8wbuo2f

v8wbuo2f1#

不管你是在创建还是编辑,模型中的保存方法都会被调用。尽管你可以通过检查对象是否有主键来区分它们,如下所示:

if not self.pk and MyModel.objects.count() >= 5:

如果你想要更复杂的验证控制,我建议把它们放在in the forms中,特别是如果你想限制表单集的数量,你可以查看这个文档。

相关问题