Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python UpdateView-won';t保存表单,按save后出现404错误_Python_Django_Django Views_Django Generic Views - Fatal编程技术网

Python UpdateView-won';t保存表单,按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

正如标题所说,我很难让UpdateView正常工作。当我按save时,表单不保存,我得到一个404错误,消息是没有用户匹配给定的查询。我在努力完成这项工作时真的很艰难,花了好几个小时在网上查看示例,但仍然无法找出哪里出了问题!如果你能在这上面照点光,我将不胜感激

只是为了澄清,我希望我的用户能够编辑他们的项目,只有该用户可以编辑它。我怀疑我可能做了很多错事

网址

模型

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会泄露用户存在的信息。