Недавно начал изучать Django и наткнулся на проблему.
У меня есть модель поста для блога, в ней определено поле og_image, которое должно хранить картинку для соцсетей. При создании нового поста, я пытаюсь через форму загрузить картинку. Форма отправляется, но самой картинки нет в папке
media/og_images, а ссылка в шаблоне ведет на дефолтное значение. Как быть? Стоит 3 версия Джанги, запускаю на локальном сервере.
models.pyclass Post(models.Model):
title = models.CharField(max_length=150, db_index=True, verbose_name='Заголовок')
slug = models.SlugField(max_length=150, blank=True, unique=True, verbose_name='УРЛ')
body = MarkdownxField(blank=True, db_index=True, verbose_name='Текст')
tags = models.ManyToManyField('Tag', blank=True, related_name='posts', verbose_name='Теги')
og_image = models.ImageField(upload_to='og_images',
default="og_images/default.jpg",
verbose_name='Картинка для соцсетей')
allow_comments = models.BooleanField(default=True, verbose_name='Открытые комментарии')
date_pub = models.DateTimeField(auto_now_add=True)
settings.pyMEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
views.pyclass PostCreate(LoginRequiredMixin, View):
model_form = PostForm
template = 'blog/post_create_form.html'
raise_exception = True
def get(self, request):
form = self.model_form()
return render(request, self.template, context={'form': form})
def post(self, request):
bound_form = self.model_form(request.POST)
if bound_form.is_valid():
new_obj = bound_form.save()
return redirect(new_obj)
return render(request, self.template, context={'form': bound_form})
forms.pyclass PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'slug', 'body', 'tags', 'og_image', 'allow_comments']
widgets = {
'title': forms.TextInput(attrs={'class': 'form-control'}),
'slug': forms.TextInput(attrs={'class': 'form-control'}),
'body': forms.Textarea(attrs={'class': 'form-control'}),
'tags': forms.SelectMultiple(attrs={'class': 'form-control'}),
'og_image': forms.FileInput(attrs={'class': 'form-control-file'}),
'allow_comments': forms.CheckboxInput(attrs={'class': 'form-check-input position-static'})
}
Форма создания поста<form class="edit-form" action="{% url 'post_create_url' %}" method="post">
<h1>Новый пост</h1>
{% csrf_token %}
{% for field in form %}
<div class="form-group">
{% if field.errors %}
<div class="alert alert-danger">
{{ field.errors }}
</div>
{% endif %}
{{ field.label }}
{{ field }}
</div>
{% endfor %}
<button type="submit" name="button" class="btn btn-primary">Создать</button>
</form>
{{ form.media }}
В шаблоне ссылку с картинкой хочу подставить сюда<meta property="og:image" content="{{ post.og_image.url }}">
<meta name="twitter:image:src" content="{{ post.og_image.url }}">