Django 博客 post 不更新它只是创建另一个对象

Django blog post doesn't update it just creates another object

这个视图应该找到一个博客 post 并改变它的信息,但它只是用新的(和旧的)信息创建一个新的 Blog 对象。

更新视图

@login_required
def view_updatepost(request, blog_id):
    if not request.user.is_staff or not request.user.is_superuser:
        raise Http404

    #post = Blog.objects.get(pk=blog_id)
    post_to_be_changed = get_object_or_404(Blog, pk=blog_id)
    form = BlogForm(request.POST or None, instance=post_to_be_changed)

    if form.is_valid():
        post_to_be_changed = form.save(commit=False)
    #
    #
        post_to_be_changed.save()
    #messages.success(request, "<a href='#'>Item</a> Saved", extra_tags='html_safe')
        return HttpResponseRedirect(post_to_be_changed.get_absolute_url())

    context = {
        'post_to_be_changed': post_to_be_changed,
        'form': form,
    }
    return render(request, 'blog/makepost.html', context)

视图使用的模板makepost.html

{% extends "base.html" %}
{% load staticfiles %}

 {% block main_content %}


<!-- Page Header -->
<!-- Set your background image for this header on the line below. -->
<header class="intro-header" style="background-image: url('{% static "img/about-bg.jpg" %}')">
    <div class="container">
        <div class="row">
            <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
                <div class="page-heading">
                    <h1>Make a Post</h1>
                    <hr class="small">
                    <span class="subheading">Share with the World.</span>
                </div>
            </div>
        </div>
    </div>
</header>

<!-- Main Content -->
<div class="container">
    <div class="row">
        <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">

            {% if not user.is_authenticated %}
                You must be <u><a href="{% url "auth_login" %}">logged in</a></u> to make a post.
            {% else %}

            <form action="{% url "makepost" %}" method="post">
            {% csrf_token %}

            {{form.as_p}}
            <div align="center">
                <input class="btn btn-default" type="submit" value="Post to Blog" onclick="window.location='{% url "" %}';"/>
                {# <a href="{% url "" %}">Home</a> #}
            </div>
        </form>


            {% endif %}
        </div>
    </div>
</div>

<hr>


{% endblock main_content %}

models.py

from django.db import models
import datetime
# Create your models here.
class Blog(models.Model):
title = models.CharField(max_length=250)
subtitle = models.CharField(max_length=250, null = True, blank=True)
date_added = models.DateTimeField(default=datetime.datetime.now())
image = models.TextField(max_length=1000, null = True, blank=True)
tags = models.TextField(max_length=500, null=True, blank=True)
article = models.TextField(max_length=15000, null=True, blank=True)
author = models.CharField(max_length=150, null=True, blank=True)

def get_absolute_url(self):
    return "/blog/%i" % self.pk

forms.py

from django import forms
from .models import Blog
import datetime

class PostForm(forms.Form):
    title = forms.CharField()
    subtitle = forms.CharField(required=False)
    date_added = forms.DateTimeField()
    image = forms.URLField(required=False)
    tags = forms.CharField(required=False)
    article = forms.CharField()
    author = forms.CharField()

class BlogForm(forms.ModelForm):
    class Meta:
        model = Blog
        fields = ('title', 'subtitle',
                    'image', 'tags',  'article')

您似乎没有在表单操作中引用更新视图 url:

<form action="{% url **"makepost"** %}" method="post">