Подскажите какой тип поля для виджета формы связанной с моделью лучше использовать, при создании формы добавления изображения в модель. Пробовал использовать
forms.FileInput(attrs={"class": "form-control"})
, но не работает. Надо чтобы картинка через виджет добавлялась в базу. С title и content все работает хорошо, а с photo не хочет, в чем пробелема?
Файл формы:
from django import forms
from .models import AllMovies
class MoviesForm(forms.ModelForm):
class Meta:
model = AllMovies
fields = ['title', 'content', 'photo', 'is_published', 'category']
widgets = {
'title': forms.TextInput(attrs={"class": "form-control"}),
'content': forms.Textarea(attrs={"class":"form-control", "rows": 5}),
'photo': forms.FileInput(attrs={"class": "form-control"}),
'category': forms.Select(attrs={"class": "form-control"}),
}
Файл основной модели:
class AllMovies(models.Model):
title = models.CharField(max_length=255, verbose_name='Название фильма')
content = models.TextField(blank=True, verbose_name='Описание')
photo = models.ImageField(upload_to="photos/%Y/%m/%d/", verbose_name='Фото', blank=True)
time_create = models.DateTimeField(auto_now_add=True, verbose_name='Создание записи')
time_update = models.DateTimeField(auto_now=True, verbose_name="Обновление записи")
is_published = models.BooleanField(default=True, verbose_name="Опубликовано")
category = models.ForeignKey('Category', on_delete=models.PROTECT, null=True, verbose_name='Категории')
def get_absolute_url(self):
return reverse('v_movies', kwargs={'movie_id': self.pk})
def __str__(self):
return self.title
class Meta:
verbose_name = 'Фильм'
verbose_name_plural = 'Фильмы'
# сортировка статей по дате создания, если будут одинаковые даты, то по названию
ordering = ['time_create', 'title']
Вьюха:
def add_movies(req):
if req.method == 'POST':
form = MoviesForm(req.POST)
if form.is_valid():
new_movie = form.save()
# возвращаем страницу созданной только что формы
return redirect(new_movie)
else:
form = MoviesForm()
return render(req, template_name='movies/add_movie.html', context={'form': form})