Как заставить одно и только одно из двух полей быть обязательным в Django?
Вот пример модели Django:
from django.db import models
from django.core.exceptions import ValidationError
class MyModel(models.Model):
field1 = models.CharField(null=True)
field2 = models.CharField(null=True)
def clean(self):
if self.field1 and self.field2:
raise ValidationError(
'Please select only field1 OR field2, not both.')
elif self.field1 is None and self.field2 is None:
raise ValidationError(
'Please select field1 or field2.')
Я хочу добиться того, чтобы заставить администратора моего приложения выбирать одно и только одно поле из двух доступных. Проблема в том, что мой код хорошо защищает от добавления нового объекта с обоими выбранными полями, но не защищает от добавления нового объекта без выбранных полей; вторая часть работает только тогда, когда администратор хочет редактировать объект без field1
и field2
, но его можно добавить в первую очередь, что я и хочу предотвратить. Есть идеи, как я могу это исправить?
Если человек не заполнит поле формы, он увидит это как пустую строку, а не None
, yo таким образом должен проверить истинность элементов (поэтому он будет соответствовать, если поле None
или пустой строке ''
):
def clean(self):
if self.field1 and self.field2:
raise ValidationError(
'Please select only field1 OR field2, not both.')
elif self.field1 and self.field2:
raise ValidationError(
'Please select field1 or field2.')