Загрузка нескольких фото Django
Нужно сделать возможность загружать сразу несколько картинок и выводить их на главной. Этот код как бы работает, нооо почему-то, если я загружаю две картинки, появляется три (то есть ещё одна повторяется). Подскажите пожалуйста, что здесь не так
models.py
class Post(models.Model):
author = models.ForeignKey(User,
null=True,
on_delete=models.CASCADE,
verbose_name='Пользователь')
image = models.ImageField(upload_to='images/')
def __str__(self):
return str(self.author)
views.py
class CreatePostView(CreateView):
model = Post
form_class = PostForm
template_name = 'post.html'
success_url = reverse_lazy('home')
def form_valid(self, form):
for item in self.request.FILES.getlist('image'):
Post.objects.create(image=item, author=self.request.user)
return super().form_valid(form)
forms.py
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['image']
image = forms.ImageField(label=u'Фотографии', widget=forms.FileInput(attrs={'multiple': 'multiple'}))
Шаблон
<ul>
{% for post in object_list %}
<h2>{{ post.author }}</h2>
<img src="{{ post.image.url}}" alt="{{ post.author }}" width="200">
{% endfor %}
</ul>
Ответы (1 шт):
Автор решения: Andrii Krasko
→ Ссылка
class CreatePostView(FormView):
form_class = PostForm
template_name = 'post.html'
success_url = reverse_lazy('home')
def form_valid(self, form):
form.save(commit=False)
for item in self.request.FILES.getlist('image'):
Post.objects.create(image=item, author=self.request.user)
return super().form_valid(form)
Потрібно змінити клас на FormView, а також заборони зберігати форму відразу form.save(commit=False).