Python UpdateView-won';t保存表单,按save后出现404错误
正如标题所说,我很难让UpdateView正常工作。当我按save时,表单不保存,我得到一个404错误,消息是没有用户匹配给定的查询。我在努力完成这项工作时真的很艰难,花了好几个小时在网上查看示例,但仍然无法找出哪里出了问题!如果你能在这上面照点光,我将不胜感激 只是为了澄清,我希望我的用户能够编辑他们的项目,只有该用户可以编辑它。我怀疑我可能做了很多错事 网址 模型Python UpdateView-won';t保存表单,按save后出现404错误,python,django,django-views,django-generic-views,Python,Django,Django Views,Django Generic Views,正如标题所说,我很难让UpdateView正常工作。当我按save时,表单不保存,我得到一个404错误,消息是没有用户匹配给定的查询。我在努力完成这项工作时真的很艰难,花了好几个小时在网上查看示例,但仍然无法找出哪里出了问题!如果你能在这上面照点光,我将不胜感激 只是为了澄清,我希望我的用户能够编辑他们的项目,只有该用户可以编辑它。我怀疑我可能做了很多错事 网址 模型 class UserProject(models.Model): user = models.ForeignKey(Us
class UserProject(models.Model):
user = models.ForeignKey(User)
title = models.CharField(max_length=100)
project_overview = models.CharField(max_length=1000)
project_picture = models.ImageField(upload_to='project_images', blank=True)
date_created = models.DateTimeField(auto_now_add=True)
project_views = models.IntegerField(default=0)
project_likes = models.IntegerField(default=0)
project_followers = models.IntegerField(default=0)
slug = models.SlugField(max_length=100, unique=True) #should this be unique or not?
def save(self, *args, **kwargs):
self.slug = slugify(self.title)
super(UserProject, self).save(*args, **kwargs)
def __unicode__(self):
return self.title
project.html模板
{% extends 'howdidu/base.html' %}
{% load staticfiles %}
{% block title %}Project{% endblock %}
{% block body_block %}
{% if project %}
<h1>{{ project.title }}</h1>
<img src="{{ project.project_picture.url }}" width = "300" height = "300" />
<h3>{{ project.project_overview }}</h3>
<p><a href="{% url 'update_project' project_user.username project.slug %}">Edit project</a></p>
{% else %}
The specified project {{ project.title }} does not exist!
{% endif %}
{% endblock %}
{% extends 'howdidu/base.html' %}
{% load staticfiles %}
{% block title %}Update project{% endblock %}
{% block body_block %}
<h1>Edit your project</h1>
<form enctype="multipart/form-data" id="UserProjectForm" method="post" action="/update_project/">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" name="submit" value="Save" />
</form>
{% endblock %}
{%extends'howdidu/base.html%}
{%load staticfiles%}
{%block title%}项目{%endblock%}
{%block body_block%}
{%if项目%}
{{project.title}
{{project.project_overview}
{%else%}
指定的项目{{project.title}}不存在!
{%endif%}
{%endblock%}
更新_project.html模板
{% extends 'howdidu/base.html' %}
{% load staticfiles %}
{% block title %}Project{% endblock %}
{% block body_block %}
{% if project %}
<h1>{{ project.title }}</h1>
<img src="{{ project.project_picture.url }}" width = "300" height = "300" />
<h3>{{ project.project_overview }}</h3>
<p><a href="{% url 'update_project' project_user.username project.slug %}">Edit project</a></p>
{% else %}
The specified project {{ project.title }} does not exist!
{% endif %}
{% endblock %}
{% extends 'howdidu/base.html' %}
{% load staticfiles %}
{% block title %}Update project{% endblock %}
{% block body_block %}
<h1>Edit your project</h1>
<form enctype="multipart/form-data" id="UserProjectForm" method="post" action="/update_project/">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" name="submit" value="Save" />
</form>
{% endblock %}
{%extends'howdidu/base.html%}
{%load staticfiles%}
{%block title%}更新项目{%endblock%}
{%block body_block%}
编辑您的项目
{%csrf_令牌%}
{{form.as_p}}
{%endblock%}
您的表单操作是/update\u project/
,但这与更新项目的url模式不匹配。相反,url与views.profile\u页面
view匹配,后者将update\u项目
视为用户名。这将引发404,因为您没有具有该用户名的用户
如果删除表单action
属性,表单将提交到当前页面,我相信这就是您想要的
或者,您可以将操作更改为
action="{% url 'update_project' project_user.username project.slug %}"
如果您这样做,您必须确保变量位于模板上下文中。oh man!非常感谢。我为那个愚蠢的错误浪费了多少时间!关于安全性,并且只允许项目用户编辑它,我是否采取了正确的方法?您的
get\u object
方法在我看来还行(不过请确保对其进行测试!)。如果用户未经授权,最好返回404,因为返回403会泄露用户存在的信息。