Merge branch 'post_create'

Fix #6
This commit is contained in:
Maximilian Friedersdorff 2022-07-07 22:02:05 +01:00
commit 17e41a9e4c
4 changed files with 39 additions and 1 deletions

View file

@ -106,3 +106,15 @@ class PostViewsTests(TestCase):
url = reverse("posts:post_detail", kwargs={"pk": self.post.pk})
c.post(url, {"comment": ""})
self.assertFalse(self.post.comments.all().exists())
def test_can_post_a_post(self):
c = Client()
c.login(username="someone", password="secret")
url = reverse("posts:post_create")
with open(
os.path.join(os.path.dirname(__file__), "test_data", "test_img.png"),
mode="rb",
) as f:
c.post(url, {"title": "title", "body": "body", "img": File(f)})
self.assertEqual(Post.objects.count(), 2)

View file

@ -5,4 +5,5 @@ from . import views
app_name = "posts"
urlpatterns = [
path("post/<int:pk>", views.PostDetailView.as_view(), name="post_detail"),
path("post/new", views.PostCreateView.as_view(), name="post_create"),
]

View file

@ -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())

View file

@ -0,0 +1,10 @@
{% extends "base.html" %}
{% block content %}
<h1>Upload a new picture</h1>
<form enctype="multipart/form-data" action="" method="post">
{% csrf_token %}
{{ form }}
<input type="submit", value="Post">
</form>
{% endblock content %}