我为我的模型写了一个验证器:
def validate_is_default(value):
if Wizard.objects.filter(set_as_default=True).count() == 1:
if value is True:
raise ValidationError(_('You can mark only one configuration as default'))
else:
raise ValidationError(_('You have to mark one configuration as default'))
我使用它时有模型:
class MyModel(models.Model):
name = models.CharField(_('Wizard name'), default='Default', max_length=32, blank=False)
...
set_as_default = models.BooleanField(_('Set as default setup'), default=False, validators=[validate_is_default])
在验证器中,我想检查数据库中是否只有一条具有set_as_default = True的记录。这在我添加新记录时工作正常,但在我尝试编辑新记录时失败。怎么解决这个问题?
我在管理面板中使用它。我不想更改默认表单,但使用此验证器以某种方式解决它。有可能吗?
答案 0 :(得分:2)
根据您的数据库后端,使用models.BooleanField
的列并不总是由Django给予Python值True
和False
(特别是,如果您使用的是MySQL,那么'我会回到1
或0
因为MySQL没有布尔类型而Django只使用了一个tinyint。
因此,只需编写if value is True:
而不是条款if value:
。像这样:
def validate_is_default(value):
if Wizard.objects.filter(set_as_default=True).count() == 1:
if value:
raise ValidationError(_('You can mark only one configuration as default'))
else:
raise ValidationError(_('You have to mark one configuration as default'))
您没有提供足够的信息让我最终确定这是您的问题,但很可能就是这样。