我正在创建一个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 %}
答案 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>