Как я могу установить '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")
Если оба поля пусты, то будет выдана ошибка валидации, говорящая о том, что хотя бы одно из них должно быть заполнено.