Пожалуйста, смотрите код ниже.По сути, когда пользователь создает объект этого класса, ему нужно указать value_type
.Если value_type==2
(в процентах), то percentage_calculated_on
(который является CheckboxSelectMultiple на стороне формы / шаблона, необходимо проверить один или несколько элементов. Проверка модели не позволяет мне проверить, как я пытаюсь -он в основном выдает исключение, которое говорит мне, что экземпляр должен иметь значение первичного ключа, прежде чем можно будет использовать отношение многие ко многим. Но мне нужно сначала проверить объект перед его сохранением. Я пробовал эту проверку в форме(modelform) сторона (используя чистый метод формы), но там тоже происходит то же самое.
Как мне добиться этой проверки?
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.")