2016-01-07 2 views
0

Этот взгляд должен найти сообщение в блоге и изменить его информацию, но вместо этого он просто создает новый объект Blog с новой (и старой) информацией.Django blog post не обновляет его, просто создает другой объект

Вид обновление

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

ответ

0

кажется, что вы не ссылаясь на ваш взгляд обновление в вашей форме URL действия:

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

Изменяя его к этому <форма действия = «» метод = «пост»> он работает отлично. У меня есть другой вопрос, я добавил print (type (blog_id)) в моем обновлении, и он сказал, что это строка. Мой вопрос: Django автоматически превращает строку в целые числа? – AquaSolid

+0

Да, в этом случае. –

Смежные вопросы