Django通用UpdateView返回404错误:使用pk时出现“找不到与查询匹配的用户”

时间:2019-05-12 05:43:38

标签: python django

我正在创建一个Django Web应用程序,并希望通过传入用户的主键来使用通用UpdateView。它适用于DetailView,但不适用于UpdateView。

我尝试指定template_name,更改了urls.py文件中路径的顺序。我还没有尝试使用,但是我知道我应该能够使用pk。

我正在使用下面django.contrib.auth中的内置用户模型作为我的个人资料。

views.py:

class Profile(generic.TemplateView):
    template_name = 'accounts/profile.html'

class ProfileUpdate(generic.UpdateView):
    model = User
    fields = ['first_name']
    template_name = 'accounts/profile_update_form.html'

我的urls.py最让我感到沮丧。地址http://127.0.0.1:8000/accounts/profile/5/工作正常,但是http://127.0.0.1:8000/accounts/profile/5/edit/返回404错误“找不到与查询匹配的用户”。因此,我知道pk = 5存在,但不适用于以/ edit /结尾的网址。

urls.py:

from django.urls import path,include
from django.contrib.auth import views as auth_views
from . import views

app_name = 'accounts'

urlpatterns = [
    path('login/',auth_views.LoginView.as_view(template_name='accounts/login.html'),name='login'),
    path('logout',auth_views.LogoutView.as_view(),name='logout'),
    path('signup/',views.SignUp,name='signup'),
    path('profile/<int:pk>/',views.Profile.as_view(),name='profile'),
    path('profile/<int:pk>/edit/',views.ProfileUpdate.as_view(),name='profile_update'),
]

profile_update_form.html:

{% extends 'base.html' %}
{% load bootstrap4 %}

{% block content %}

<div class="container">
    <h2>Sign Up</h2>
    <form method="POST" enctype="multipart/form-data">
      {% csrf_token %}
      {% bootstrap_form form layout='inline' %}
      <input type="submit" class="btn btn-primary" value="Sign Up">
    </form>
</div>

{% endblock %}

1 个答案:

答案 0 :(得分:0)

那是因为 user.pk 与相同用户 userprofile 的主键不同,如果您检查数据库中的受人尊敬的表,您会看到差异,是的,我首先使用的最简单的解决方案是使用信号,这令人困惑:< /p>

componentDidUpdate(props)
{
    const image = new window.Image();
    image.src = this.props.backgroundImage; // path to the image
    image.height = image.naturalHeight;
    image.width = image.naturalWidth;

    image.onload = () => {
        this.setState({
            fillPatternImage: image
        })
    }
}

<Stage
    width={1000}
    height={1000}
    style={{ border: '1px solid grey' }}
>
    <Layer>
        <Rect
            x={0}
            y={0}
            width={1000}
            height={1000}
            listening={false}
            fillPatternImage={this.state.fillPatternImage}
        >
        </Rect>
    </Layer>
</Stage>