python 3.x - Django blog post doesn't update it just creates another object -
this view supposed find blog post , change it's information, instead of makes new blog object new (and old) information.
the update view
@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)
the template used view makepost.html
{% extends "base.html" %} {% load staticfiles %} {% block main_content %} <!-- page header --> <!-- set background image header on 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 post</h1> <hr class="small"> <span class="subheading">share 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 %} must <u><a href="{% url "auth_login" %}">logged in</a></u> make 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 blog" onclick="window.location='{% url "" %}';"/> {# <a href="{% url "" %}">home</a> #} </div> </form> {% endif %} </div> </div> </div> <hr> {% endblock main_content %}
the models.py
from django.db import models import datetime # create 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
the forms.py
from django import forms .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')
it seems not referring update view in form action url:
<form action="{% url **"makepost"** %}" method="post">
Comments
Post a Comment