diff --git a/flangr/posts/urls.py b/flangr/posts/urls.py index 2223c6b..7dc96a0 100644 --- a/flangr/posts/urls.py +++ b/flangr/posts/urls.py @@ -5,4 +5,5 @@ from . import views app_name = "posts" urlpatterns = [ path("post/", views.PostDetailView.as_view(), name="post_detail"), + path("post/new", views.PostCreateView.as_view(), name="post_create"), ] diff --git a/flangr/posts/views.py b/flangr/posts/views.py index 4e867aa..c571a5d 100644 --- a/flangr/posts/views.py +++ b/flangr/posts/views.py @@ -1,7 +1,8 @@ -from django.views.generic import DetailView +from django.views.generic import DetailView, CreateView from django.views.generic.edit import ModelFormMixin from django.forms import modelform_factory from django.http import HttpResponseRedirect +from django.urls import reverse from django.contrib.auth.mixins import LoginRequiredMixin @@ -32,3 +33,17 @@ class PostDetailView(LoginRequiredMixin, DetailView, ModelFormMixin): return self.form_valid(form) else: return self.form_invalid(form) + + +class PostCreateView(LoginRequiredMixin, CreateView): + model = Post + fields = ("title", "body", "img") + + def get_success_url(self): + return reverse("posts:post_detail", kwargs={"pk": self.object.pk}) + + def form_valid(self, form): + self.object = form.save(commit=False) + self.object.user = self.request.user + self.object.save() + return HttpResponseRedirect(self.get_success_url()) diff --git a/flangr/templates/posts/post_form.html b/flangr/templates/posts/post_form.html new file mode 100644 index 0000000..cac2d5e --- /dev/null +++ b/flangr/templates/posts/post_form.html @@ -0,0 +1,10 @@ +{% extends "base.html" %} + +{% block content %} +

Upload a new picture

+
+ {% csrf_token %} + {{ form }} + +
+{% endblock content %}