#python #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
«, но в первую очередь его можно добавить, что я хочу предотвратить. Есть какие-нибудь идеи о том, как я могу это исправить?
Комментарии:
1.
elif not self.field1 and not self.field2:
?2. Вау. Это работает, большое спасибо!
Ответ №1:
Если человек не заполнит поле формы, он увидит, что это пустая строка , нет None
, таким образом, вы должны проверить правдивость элементов (поэтому он будет соответствовать, если поле 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.')
Комментарии:
1. Спасибо за ваше объяснение, в этом есть полный смысл!