Невозможно загрузить изображения в формах django
Я только начинаю работать с Django и столкнулся с первой проблемой, которую не могу решить. С уровня администратора можно загружать фотографии, но с формы на сайте это невозможно. Единственная фотография, которая может быть загружена, это фотография по умолчанию, которую я установил в файле models. Если я удалю картинку по умолчанию из models и загружу фотографию из формы, появится ошибка.
Вот некоторые из моих файлов:
<class Post(models.Model):
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
publish_date = models.DateTimeField(blank=True, null=True)
image = models.ImageField(upload_to='images/', blank=True, null=True, default='images/user.jpg')
def publish(self):
self.publish_date = timezone.now()
self.save()
def __str__(self):
return self.title
forms.py:
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'text', 'image']
views.py:
class Image(TemplateView):
form = PostForm
template_name = 'blog/image.html'
def post(self, request, *args, **kwargs):
form = PostForm(request.POST, request.FILES)
if form.is_valid():
obj = form.save()
return HttpResponseRedirect(reverse_lazy('image_display', kwargs={'pk': obj.id}))
context = self.get_context_data(form=form)
return self.render_to_response(context)
def get(self, request, *args, **kwargs):
return self.post(request, *args, **kwargs)
class ImageDisplay(DetailView):
model = Post
template_name = 'blog/image_display.html'
context_object_name = 'image'
def post_list(request):
posts = Post.objects.filter(publish_date__lte=timezone.now()).order_by('publish_date')
return render(request, 'blog/post_list.html', {'posts': posts})
def post_detail(request, pk):
post = get_object_or_404(Post, pk=pk)
return render(request, 'blog/post_detail.html', {'post': post})
def error_404_view(request, exception):
data = {"name": "Blog for programmers"}
return render(request, 'blog/404.html', data)
def post_new(request):
if request.method == "POST":
form = forms.PostForm(request.POST, request.FILES)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.publish_date = timezone.now()
post.save()
return redirect('post_detail', pk=post.pk)
else:
form = PostForm()
return render(request, 'blog/post_edit.html', {'form': form})
post_detail.html:
{% block content %}
<div class="post">
{% if post.published_date %}
<div class="date">
{{ post.published_date }}
</div>
{% endif %}
<h2>{{ post.title }}</h2>
<img src="{{ post.image.url }}" alt="Image" width="250">
<p>{{ post.text|linebreaksbr }}</p>
</div>
post_list.html:
{% block content %}
{% for post in posts %}
<div class="post">
<div class="data">
<p>Published: {{ post.publish_date }}</p>
</div>
<h2><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h2>
<img src="{{ post.image.url }}" alt="Image" width="100">
<em>{{ post.text|linebreaksbr }}</em>
</div>
{% endfor %}
Спасибо за помощь!!!