Как я могу установить 'or' в двух полях модели django

Предположим, у меня есть django-модель изображения:

from django.db import models
class Image(models.Model):
      ...
      image = models.ImageField(upload_to='some_place')
      image_url = models.URLField()
      ...

и я хочу, чтобы пользователь мог загрузить либо image, либо url, поэтому я не могу установить оба поля. null=True, потому что я хочу, чтобы хотя бы одно из них отображалось в шаблоне. Как я могу это сделать?

Вы можете поставить null=True к обоим, а затем проверить, что хотя бы одно из двух полей вашей формы было заполнено, используя ее метод clean.

class ImageForm(forms.ModelForm):
    def clean(self):
        if not (self.cleaned_data.get('image') or self.cleaned_data.get('image_url')):
            raise forms.ValidationError("You must fill at least one of both fields")

Если оба поля пусты, то будет выдана ошибка валидации, говорящая о том, что хотя бы одно из них должно быть заполнено.

Вернуться на верх