Django视图与模板布尔逻辑处理问题求助
问题1:根据Boolean字段控制表单是否保存
问题分析
原代码直接调用form.save(),无论用户选择"Yes"还是"No"都会保存数据,还存在拼写错误(sub.sumit应为sub.submit),且缺少核心的条件分支逻辑。正确逻辑应该是:先验证表单有效性,再根据submit字段的值决定是否保存,未保存时返回编辑页面。
修正后的views.py代码
def submit(request): if request.method == 'POST': form = submitForm(request.POST) if form.is_valid(): # 先获取表单中的submit字段值,暂不保存 should_submit = form.cleaned_data['submit'] if should_submit: # 选择Yes时保存数据并跳转 form.instance.user = request.user form.save() messages.info(request, 'You have submitted your form successfully') return redirect('home') else: # 选择No时不保存,提示继续编辑 messages.info(request, 'Continue editing your data') return render(request, 'portal/home/submit.html', {'form': form}) # 表单验证失败时返回原页面 return render(request, 'portal/home/submit.html', {'form': form}) form = submitForm() context = {'form': form} return render(request, 'portal/home/submit.html', context)
问题2:根据Boolean字段控制模板按钮显示
问题分析
原代码中sub = SubmitData.objects.filter(user_id=user)返回的是QuerySet对象,模板中{% if sub %}只要用户有SubmitData记录就会隐藏Save/Update按钮,但实际需要判断用户是否存在submit=True的记录。此外,若用户有多条记录,应取最新的一条来判断状态。
步骤1:修正user_info视图代码
def user_info(request): user = request.user try: personal = Personalinfo.objects.get(user_id=user) except Personalinfo.DoesNotExist: messages.error(request, 'Please fill in all data') personal = None # 获取用户最新的SubmitData记录(按提交时间倒序取第一条) sub = SubmitData.objects.filter(user_id=user).order_by('-date_submited').first() if request.method == "POST": form = usersForm(request.POST, request.FILES, instance=personal) if form.is_valid(): form.instance.user = request.user form.save() messages.success(request, 'User data saved successful! Click next to proceed') return redirect('user_info') else: messages.error(request, 'Error! Check your data') return redirect('user_info') form = usersForm(instance=personal) context = { "form": form, 'sub': sub, } return render(request, 'portal/home/user_info.html', context)
步骤2:修正模板判断逻辑
模板需要判断sub是否存在且sub.submit为True,此时隐藏Save/Update按钮;其他情况显示所有按钮:
{% if sub and sub.submit %} <div class="col-md-4 col-sm-3"> <div class="text-center"> <a class="btn btn-dark text-decoration-none text-white bg-dark mt-4 mb-0" href="{% url 'academy' %}">Next</a> </div> </div> {% else %} <div class="row"> <div class="col-md-10 col-sm-10 mx-auto "> <button type="submit" name="register" class="text-white btn bg-dark mt-4 mb-0"> Save </button> <a class="btn btn-dark text-decoration-none text-white btn bg-dark mt-4 mb-0" href="{% url 'user_update' request.user.pk %}"> Update </a> <a class="btn btn-dark text-decoration-none text-white bg-dark mt-4 mb-0" href="{% url 'academy' %}">Next</a> </div> </div> {% endif %}
内容的提问来源于stack exchange,提问作者Wilfred Mathias
相关产品推荐
相关产品推荐

