Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-使用validate_unique作为admin更新对象_Python_Django_Django Models_Django Admin_Pycharm - Fatal编程技术网

Python Django-使用validate_unique作为admin更新对象

Python Django-使用validate_unique作为admin更新对象,python,django,django-models,django-admin,pycharm,Python,Django,Django Models,Django Admin,Pycharm,这是我的问题:作为管理员,如果我试图从django管理员站点编辑/更新“somenumber”,我会得到ValidationError 我正在使用PyCharm不覆盖验证\u unique它是而不是供用户覆盖的钩子。这是Django使用和实现的方法,您不应该触碰它 使字段唯一的正确方法是在字段定义中添加unique=True: class MyObject(models.Model):`` id = models.Charfield(max_length=30, primary_key=

这是我的问题:作为管理员,如果我试图从django管理员站点编辑/更新“somenumber”,我会得到ValidationError


我正在使用PyCharm不覆盖
验证\u unique
它是而不是供用户覆盖的钩子。这是Django使用和实现的方法,您不应该触碰它

使字段唯一的正确方法是在字段定义中添加
unique=True

class MyObject(models.Model):``
    id = models.Charfield(max_length=30, primary_key=True)
    somenumber = IntegerField(default=0)

    def validate_unique(self, exclude=None):
        if MyObject.objects.filter(id=self.id).exists():
        raise ValidationError({'id': _('CUSTOM ERROR')})

这将在数据库级别强制执行唯一性,当您尝试将非唯一值保存到
somenumber
时,原始的
validate\u unique
方法将自动引发
ValidationError

ValidationError
不是有用的信息,你需要编辑你的问题来告诉我们错误是什么,也许还可以发布完整的stacktrace。我已经告诉过你问题出在哪里,也许我没有解释自己。从管理网站,我想:-使用validate unique创建一个新对象,该对象停止使用相同字段创建另一个对象(使用validate_unique,在本例中为“id”)-通过编辑“somenumber”通过管理站点更新同一对象我开始认为我必须重写clean()并在某处调用它…我认为您得到的是同一个对象,您应该更改筛选器以避免在更新时搜索自身。@AngelCruijff更新时如何更改筛选器?
class MyObject(models.Model):
    somenumber = IntegerField(default=0, unique=True)