Django无效表单



我有一个带有表单的模态。问题是,在无效表单上,它确实返回了表单错误,但它也通过再次呈现主页来关闭模态对话框。它也是主页,因此登录时需要返回渲染。

如果帖子失败,我该如何返回屏幕

def index(request):
context = {}
if request.method == "POST":
print(request.POST)
form = UserProfileForm(request.POST or None, request.FILES or None,instance=request.user)
if form.is_valid():
form.save()
return redirect('home') 
else:
form = UserProfileForm()
context['form']= form
return render(request, "home.html", context)

模态

{% block content %}

<div class="modal fade" id="editProfile" tabindex="-1" role="dialog" aria-labelledby="editProfilelCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="editProfileLongTtitle">Edit Profile</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
{% include 'form.html' %}
</div>
</div>
</div>
</div>
{% endblock %} 

form.html

{% block content %}
<form method = "POST" action='.' enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Upload</button>
</form>
{% endblock %}

home.html

{% extends 'base.html' %}
{% block title %}Home{% endblock %}
{% block content %}
{% if user.is_authenticated %}
<div class="container"> 
{% include 'editProfileModal.html' %} 
<div class='row'>  
{% include 'sidebar.html' %}
</div> 
</div> 
{% else %}
<p>You are not logged in</p>
<a href="{% url 'login' %}">Log In</a>
<a href="{% url 'signup' %}">Sign up</a>

{% endif %}
{% endblock %}

在发送POST请求时需要显示模态,而视图不发送重定向。你可以尝试下一个糟糕的解决方案。它很难看,但可以工作:


def index(request):
context = {'is_post': False}
if request.method == "POST":
context['is_post'] = True
form = UserProfileForm(request.POST or None, request.FILES or None,instance=request.user)
if form.is_valid():
form.save()
return redirect('home') 
else:
form = UserProfileForm()
context['form']= form
return render(request, "home.html", context)
{% block content %}

<div class="modal fade" id="editProfile" tabindex="-1" role="dialog" ... >
<!-- your content ... -->
</div>
<!-- Do this after jQuery loaded -->
{% if is_post %}
<script type="text/javascript">
$(window).on('load', function() {
$('#myModal').modal('show');
});
</script>
{% endif %}
{% endblock %}

您可以简单地返回带有表单错误的HttpResponse

from django.http import HttpResponse
if form.is_valid():
...
else:
return HttpResponse(form.errors.as_json())

试试这个:

def index(request):
context = {}
if request.method == "POST":
print(request.POST)
form = UserProfileForm(request.POST or None, request.FILES or None,instance=request.user)
if form.is_valid():
form.save()
return redirect('home') 
context['form']= form
return render(request, "home.html", context)

最新更新