Как заставить одно и только одно из двух полей быть обязательным в 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.')
Вернуться на верх