請參閱下面的代碼。基本上,當用戶創建這個類的對象時,他們需要指定value_type
。如果value_type==2
(百分比),然後percentage_calculated_on
(這是一個CheckboxSelectMultiple在表單/模板端需要有一個或多個項目檢查。模型驗證不允許我像我試圖驗證 - 它基本上拋出一個例外,它告訴我,在使用多對多關係之前,實例需要有一個主鍵值,但是我需要在保存之前先驗證對象,我已經在form(modelform)一側(使用形式的清潔方法),但同樣的事情發生也有。django manytomany驗證
如何去實現這個驗證?
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的模型驗證進行驗證。所以如果有人有任何想法,請盡力在此發佈。謝謝。 – chefsmart 2010-10-04 12:53:43
同樣的問題:http://stackoverflow.com/questions/7986510/django-manytomany-model-validation – user920391 2013-02-08 16:02:59