【发布时间】:2010-10-04 08:29:03
【问题描述】:
请看下面的代码。基本上,当用户创建这个类的对象时,他们需要指定value_type。如果value_type==2(百分比),那么percentage_calculated_on(这是表单/模板端的 CheckboxSelectMultiple 需要检查一个或多个项目。模型验证不允许我像我试图那样进行验证 -它基本上抛出一个异常,告诉我实例需要有一个主键值才能使用多对多关系。但我需要先验证对象,然后再保存它。我已经在表单上尝试过这个验证(modelform) 端(使用表单的 clean 方法),但同样的事情也发生在那里。
如何实现此验证?
INHERENT_TYPE_CHOICES = ((1, 'Payable'), (2, 'Deductible'))
VALUE_TYPE_CHOICES = ((1, 'Amount'), (2, 'Percentage'))
class Payable(models.Model):
name = models.CharField()
short_name = models.CharField()
inherent_type = models.PositiveSmallIntegerField(choices=INHERENT_TYPE_CHOICES)
value = models.DecimalField(max_digits=12,decimal_places=2)
value_type = models.PositiveSmallIntegerField(choices=VALUE_TYPE_CHOICES)
percentage_calculated_on = models.ManyToManyField('self', symmetrical=False)
def clean(self):
from django.core.exceptions import ValidationError
if self.value_type == 2 and not self.percentage_calculated_on:
raise ValidationError("If this is a percentage, please specify on what payables/deductibles this percentage should be calculated on.")
【问题讨论】:
-
我已将下面 Manoj Govindan 的回答标记为“已接受”,因为它解决了问题。但是,我仍然希望使用 Django 的模型验证对其进行验证。因此,如果有人有任何想法,请努力在此处发布。谢谢。
标签: django validation model-validation