2011-05-17 65 views
0

工作,我写了我的模型验证程序是:自定义模型验证程序不上编辑

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

“不起作用”不是一个有用的描述。它如何失败? – 2011-05-17 18:15:34

+0

现在我在模型保存中检查set_as_default。如果将其中一个设置为默认值,那么我将此字段更改为false,并将新记录设置为true。 – szaman 2011-05-23 10:18:11

回答

2

根据您的后端数据库,使用models.BooleanField列将不总是被赋予了Python值TrueFalse通过Django的(特别是,如果你使用MySQL,你会得到10因为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')) 

您还没有提供足够的信息来确定这是你的问题,但它很可能是。