Есть приложение-блог и есть форма,
class NewPostForm(forms.ModelForm):
class Meta(object):
model = Post
fields = ("title", "content", "image")
labels = {
"content": "Text"
}
widgets = {
"title": Textarea(attrs={"rows": 2, "cols": 55}),
"content": Textarea(attrs={"rows": 30, "cols": 55})
}
созданная по модели
class Post(models.Model):
title = models.CharField(null=None, max_length=100)
content = models.CharField(null=None, blank=True, max_length=5000, default=" ")
created_at = models.DateTimeField(auto_now_add=True)
visible = models.BooleanField(default=True)
author = models.CharField(max_length=100, null=False, default="test")
image = models.ImageField(upload_to="blog", null=True, blank=True)
def get_absolute_url(self):
return reverse_lazy("blog:update-post", kwargs={"pk": self.pk})
def __str__(self):
visible = "\N{FIRE}" if self.visible else "\N{SLEEPING SYMBOL}"
msg = f'[{self.pk}] "{self.title}" {visible}'
return msg
class Meta:
ordering = ["-created_at", "title", "pk"]
Суть очень проста и заключается в том что данные из формы записываются в БД и оттуда попадают на главную страницу, но я где то видимо ошибся и картинка сохраняется только через админку.
Код View
class NewPostView(LoginRequiredMixin, CreateView):
form_class = NewPostForm
template_name = "blog/post_form.html"
success_url = reverse_lazy("blog:index")
extra_context = {
"action_name": "Create Post",
"action_url": reverse_lazy("blog:new-post"),
}
def form_valid(self, form):
instance = form.save(commit=False)
instance.author = self.request.user
instance.save()
return redirect(self.success_url)