【发布时间】:2015-06-18 16:33:19
【问题描述】:
我正在尝试为 Django 1.6.1 中的 django.contrib.auth.User 类构建一个 UpdateView。 UpdateView 重用创建模板并使用 UpdateForm 编辑不必要的字段。管理员应该使用这个UpdateView 来更新系统上所有其他用户的用户名和电子邮件。
我可以通过在 URL 字段中指定用户 PK 来导航到表单。这意味着我到达了一个页面,其中的编辑表单填充了 PK 指定的用户详细信息。但是,当我提交表单时,Django 会将我带到没有用户 PK 的更新 url,这会引发 404。
# urls.py
url(r'^update/(?P<pk>[\d]+)$', UpdateUserView.as_view(), name='update_user'),
# views.py
class UpdateUserView(UpdateView):
model = User
form_class = UpdateForm
template_name = "create_user.html"
success_url = reverse_lazy('manage_users')
def get_context_data(self, **kwargs):
context = super(UpdateUserView, self).get_context_data(**kwargs)
instance = None
user_pk = self.kwargs.get('pk')
context['submit_name'] = 'Update Order'
if user_pk:
instance = get_object_or_404(User, pk=user_pk)
if self.request.POST:
context['form'] = UpdateForm(self.request.POST, instance=instance)
else:
context['form'] = UpdateForm(instance=instance)
return context
def form_valid(self, form):
context = self.get_context_data()
form = context['form']
if form.is_valid():
return redirect(reverse_lazy('manage_users'))
else:
return self.render_to_response(self.get_context_data(form=form))
# forms.py
class UpdateForm(ModelForm):
class Meta:
model = User
fields = ("username","email")
def __init__(self, *args, **kwargs):
super(UpdateForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_class = 'form-create'
self.helper.form_method = 'post'
self.helper.form_action = '.'
self.helper.layout = Layout(
Fieldset(
'',
Field('username', css_class='form-control'),
Field('email', css_class='form-control'),
),
ButtonHolder(
Submit('submit', 'Update User')
),
)
【问题讨论】: