gpt4 book ai didi

python - 基于类的 View 扩展 UpdateView 未正确保存表单

转载 作者:太空狗 更新时间:2023-10-29 22:23:47 25 4
gpt4 key购买 nike

我试图在 Django 1.3 中使用 UpdateView 保存表单,但似乎遇到了问题。当我保存表单时,它 POST 到当前 URL 并且成功 url 是相同的 url。

保存表单时,数据似乎发生了变化,因为页面上的所有字段都已更新,但当我刷新时,一切似乎都恢复了。

表单是模型表单,这是我的观点:

class UserProfileView(UpdateView):
context_object_name = 'profile'

def get_template_names(self):
return ['webapp/user_profile.html']

def get_queryset(self):
pk = self.kwargs.get('pk', None)

if pk is not None:
user = User.objects.get(pk=pk)
else:
raise AttributeError(u"Could not locate user with pk %s"
% pk)

if user.contributor_profile.all():
queryset = Contributor.objects.filter(user__pk=pk)
else:
queryset = Member.objects.filter(user__pk=pk)

return queryset

def get_object(self, queryset=None):
if queryset is None:
queryset = self.get_queryset()

return queryset.get()

我看不出哪里出了问题,因为 Django 通过 UpdateView 类和它扩展的 Mixin 保存表单。以前有人遇到过这个问题吗?

最佳答案

找出解决方案。问题的发生是因为表格中存在未报告的错误。这似乎发生在需要以某种方式设置以使表单有效的隐藏字段中。

解决方案非常简单。您只需要覆盖 post 函数并考虑所有隐藏字段:

def post(self, request, *args, **kwargs):
pk = self.kwargs.get('pk', None)

if pk is not None:
user = User.objects.get(pk=pk)
else:
raise AttributeError(u"Could not locate user with pk %s"
% pk)

if user.contributor_profile.all():
contributor = Contributor.objects.get(user=user)
form = ContributorForm(request.POST, instance=contributor)
else:
member = Member.objects.get(user=user)
form = MemberForm(request.POST, instance=member)

if form.is_valid():
self.object = form.save()
return HttpResponseRedirect(self.get_success_url())
else:
return self.render_to_response(self.get_context_data(form=form))

关于python - 基于类的 View 扩展 UpdateView 未正确保存表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5899810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com