'nothing happens when submitting django form

I have a problem with django forms, when submitting a form nothing seems to happen, even the server didn't get any response except GET request to view the form template.

here is my code for the forms.py :

from django.forms import ModelForm
from .models import Post


class PostForm(ModelForm):
    class Meta:
        model = Post 
        fields = [
            "title",
            "content",
            "category"
        ]

and here is my post_form.html :

{% extends 'base.html' %}


{% block content %}
    <h1>form</h1>
    <form method="POST" action=".">
        {% csrf_token %}
        {{ form.as_p }}
    </form>
    <button type="submit">Create Post</button>
{% endblock content %}

and here is my handling for the form in views.py :

def post_create(request):

    if request.method == "POST":
        form = PostForm(request.POST)

        if form.is_valid():
            post = form.save(commit=False)
            post.save()

            return redirect("posts:detail", pk=post.pk)
    else :
        form = PostForm()

    context = {
        "form":form,
    }

    return render(request,"post_form.html", context)


Solution 1:[1]

forms.py

from django.forms import ModelForm
from .models import Post


class PostForm(ModelForm):
    class Meta:
        model = Post 
        fields = ["title", "content", "category"]

views.py

def post_create(request):
    form = PostForm()
    if request.method == "POST":
        form = PostForm(request.POST)
        if form.is_valid():
            post = form.save()
            return redirect("posts:detail", pk=post.pk)
    return render(request,"post-form.html", {"form": form})

post-form.html

{% extends 'base.html' %}
{% block content %}
    <h1>form</h1>
    {% for error in form.non_field_errors %}
         <article class="message is-danger alert-message">
             <div class="message-body">
               <p>{{ error|escape }}</p>
             </div>
         </article>
    {% endfor %}
    <form method="POST">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" value="Create Post">
    </form>
{% endblock content %}

Solution 2:[2]

in your views:

if form.is_valid():
    form.commit = False
    form.save()

or

if form.is_valid():
    form.save(commit=false)

I suggest the latter

Don't Forget Place Your Submit Button In Form Tag !

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Aminoddin Akbari