Самый простой способ - переопределить метод save()
вашей модели:
class Group(models.Model):
contacts = models.ManyToManyField(Contact)
contact_primary = models.ForeignKey(Contact, related_name="contact_primary", blank=True, null=True)
all_contacts = models.BooleanField(blank=True, null=True)
def save(self, *args, **kwargs):
if self.contact_primary is not None and self.all_contacts is not None:
raise Exception("some error message here")
if self.contact_primary is None and self.all_contacts is None:
raise Exception("some other error message here")
return super().save()
Обратите внимание, что я добавил blank=True
в поля вашей модели. Это необходимо, если вы хотите вставить пустые столбцы через администратора или через форму.
Обновление
Если вы хотите поднять ValidationError
, вы должны поднятьэто из метода clean()
модели. В противном случае вы передадите клиенту ошибку 500, а не сообщение об ошибке.