Vui lòng xem mã bên dưới. Về cơ bản, khi người dùng tạo đối tượng của lớp này, họ cần phải chỉ định value_type
. Nếu value_type==2
(tỷ lệ phần trăm), thì percentage_calculated_on
(là một CheckboxSelectMultiple ở phía biểu mẫu/mẫu cần phải có một hoặc nhiều mục được chọn. Xác thực mô hình không cho phép tôi xác thực như tôi đang cố gắng - về cơ bản nó ném một ngoại lệ cho tôi biết rằng cá thể cần phải có một giá trị khóa chính trước khi một mối quan hệ nhiều-nhiều có thể được sử dụng.Nhưng tôi cần phải xác nhận hợp lệ đối tượng trước khi lưu nó. Tôi đã thử xác nhận này ở phía form (modelform) (sử dụng phương pháp sạch của mẫu), nhưng điều tương tự xảy ra ở đó quá.django manytomany validation
làm thế nào để đi về việc đạt được xác nhận điều này?
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.")
Tôi đã đánh dấu câu trả lời của Manoj Govindan dưới đây là "được chấp nhận" vì giải quyết được sự cố. Tuy nhiên, tôi vẫn muốn có nó xác nhận bằng cách sử dụng xác thực mô hình của Django. Vì vậy, nếu bất cứ ai có bất kỳ ý tưởng nào, hãy cố gắng đăng nó ở đây. Cảm ơn. – chefsmart
cùng một câu hỏi: http://stackoverflow.com/questions/7986510/django-manytomany-model-validation – user920391