Django处理大量表格

2024-04-19 06:04:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我开始在一个网站上工作,显然会有很多按钮,我仍然只有2个按钮要处理,我的一个视图已经有了这段代码来处理这两个表单提交

if request.method == "POST":
    if "see" in request.POST:
        seetagform = SeeTagForm(request.POST)
        createform = CreateForm()
        if seetagform.is_valid():
            cd = seetagform.cleaned_data
            tagstring = "_".join(cd["name"].split(' '))
            return HttpResponseRedirect(reverse("base:see",args=(tagstring,)))
    elif "create" in request.POST:
        createform = CreateForm(request.POST)
        seetagform = SeeTagForm()
        if createform.is_valid():
            cd = createform.cleaned_data
            p = Event.objects.create(start=cd["datetime"])
            tags = cd["tags"]
            tags = tags.split(' ')
            for tag in tags:
                t = Tag.objects.get(name=tag)
                t.events.add(p)
            return HttpResponseRedirect(reverse("base:see",args=(tagstring,)))

    else:
        createform = CreateForm()
        seetagform = SeeTagForm()

else:
    createform = CreateForm()
    seetagform = SeeTagForm()

好吧,据我所知,这是许多如果的和其他的只有2个按钮(但这里的一切都是需要的),所以我想知道它可能是混乱的,当我有12个按钮在我的网页上。这看起来不太像Python! 有没有更简单/更聪明的方法来处理许多表单提交?你知道吗

提前谢谢


Tags: in表单ifisrequesttagscdpost
1条回答
网友
1楼 · 发布于 2024-04-19 06:04:08

我也是这样做的,只是在按钮名称中添加前缀,以便更清楚

@login_required def profile_view(request): message = None user = MyUser.objects.get(pk=request.user.pk) addresses = user.profile_address.all() AddressFormSet = modelformset_factory(Address, fields=['city','zip_code','address','phone','default_address', 'first_name','last_name']) address_formset = AddressFormSet(queryset=addresses) profile_form = ProfileForm(instance=user) pass_form = PasswordChangeForm() if request.method == "POST": if 'btn_profile' in request.POST: profile_form = ProfileForm(request.POST, instance=user) if profile_form.is_valid(): profile_form.save() messages.add_message(request, messages.INFO, 'Successfully changed your profile') return HttpResponseRedirect(reverse('profile')) if 'btn_pass' in request.POST: pass_form = PasswordChangeForm(request.POST) if pass_form.is_valid(): user.set_password(pass_form.cleaned_data['password1']) user.save() messages.add_message(request, messages.INFO, 'Successfully changed your password') return HttpResponseRedirect(reverse('profile')) if 'btn_address' in request.POST: address_formset = AddressFormSet(request.POST) if address_formset.is_valid(): for address_form in address_formset: if address_form.is_valid() and address_form.has_changed(): address = address_form.save(commit=False) address.user_profile = user address.save() return HttpResponseRedirect(reverse('profile')) orders = Order.objects.filter(user = user).order_by('-created') context = { 'address_formset': address_formset, 'pass_form': pass_form, 'profile_form':profile_form, 'message':message, 'orders':orders, } return render(request,'custom_auth/profile.html', context)

相关问题 更多 >