def create_post(request):
    page_title = "Create Post"
    form = PostForm(request.POST or None, request.FILES or None)
    if request.method == "POST":
        if form.is_valid():
            myfrom = form.save(commit=False)
            myfrom.author = request.user
            myfrom.save()
            form.save_m2m()  # save many 2 many field must be like that
            return redirect(reverse('blog:posts'))
        else:
            form = PostForm()

    context = {
        'create_or_update_post_form': form,
        'page_title': page_title,
    }
    return render(request, 'post/post_create_or_update.html', context)
def post_update(
    request, slug
):  #the same view and template create_post with minor change "instance=post_details"
    page_title = "Edit Post"
    post_details = Post.objects.get(slug=slug)
    form = PostForm(
        request.POST or None, request.FILES or None, instance=post_details
    )  # use "instance=" to give the form the current data in the form
    if request.method == "POST":
        if form.is_valid():
            myfrom = form.save(commit=False)
            myfrom.save()
            form.save_m2m()  # save many 2 many field must be like that
            return redirect(reverse('blog:post_details',
                                    args=(slug, )))  # the way to redirect slug
        else:
            form = PostForm()

    context = {
        'create_or_update_post_form': form,
        'page_title': page_title,
    }
    return render(request, 'post/post_create_or_update.html',
                  context)  # different urls for the same html page