【发布时间】:2021-08-08 16:16:32
【问题描述】:
当我在我的项目中使用 ajax 时,form.is_valid() 方法没有验证表单。它显示“此字段需要错误”,但我使用 request.POST 访问它意味着我填写了所有字段。
''' 这是呈现 django 模型表单的 html 代码
##HTML FORM##
<form action="" method="post" enctype="multipart/form-data" id="reception_form" novalidate> {% csrf_token %}
{% for field1 in form1 %}
<label for="{{field1.id_for_label}}"> {{field1.label}} </label> {{field1}}
<div>
{% if field1.errors %}{% for error in field1.errors %} <small class="errorlist">{{error}}</small> {% endfor %}{% endif %}
</div>
{% endfor %}
{% for field2 in reception %}
{% if field2.name != 'gender' %}
<label for=" {{field2.id_for_label}} "> {{field2.label}} </label> {{field2}}
<div>
{% if field2.errors %}{% for error in field2.errors %} <small class="errorlist">{{error}}</small> {% endfor %}{% endif %}
</div>
{% endif %}
{% endfor %}
{% for radiofield in reception.gender %}
{{radiofield.tag}}
<label for=" {{radiofield.id_for_label}} "> {{radiofield.choice_label}} </label> <br>
{% endfor %}
<input type="submit" value="Add Reception" name="Add Reception" class="btn btn-secondary mb-3" >
</form>
----------
## Ajax ##
$('#reception_form').submit(function(e){
console.log(" submit pressed")
e.preventDefault();
let Rnm = $('#id_username').val();
let Rfnm = $('#id_first_name').val();
let Rlnm = $('#id_last_name').val();
let Rem = $('#id_email').val();
let Rpwd = $('#id_password1').val();
let Rmob = $('#id_mob_no').val();
let Rcty= $('#id_city').val();
let Rdob = $('#id_dob').val();
let Rpr = $('#id_profile_photo').val();
let Rgen = $("input[name='gender']:checked").val()
let Rcsr = $("input[name='csrfmiddlewaretoken']").val()
reception_data = {Rusername : Rnm , Rfirst_name:Rfnm ,Rlast_name:Rlnm ,Remail:Rem , Rpassword:Rpwd, RmMob_no:Rmob , Rcity:Rcty , RBirth_Date :Rdob, Rprofile:Rpr, Rgender:Rgen , csrfmiddlewaretoken:Rcsr};
//console.log(reception_data)
$.ajax({
url: "{% url 'AddReception' %}" ,
type : 'POST',
data : reception_data,
dataType:'json',
success: function(data){
console.log("ajax executed");
console.log(data);
}
});
});
----------
admin_home 视图渲染初始表单和用户信息
## views ##
## 1) home##
def Admin_home(request):
print("admin Home")
user = request.user
admin = Admin.objects.get(pk=user)
# print(request)
form1 = Register()
reception = Register_Reception()
param = {'user':user , 'admin':admin , 'form1':form1 , 'reception':reception}
return render(request , "patients/admin/home.html" , param)
----------
This view function handles the ajax request but is_valid() returns false
## 2) Add Reception ##
def Add_reception(request):
if request.method == "POST":
form1 = Register(request.POST) #usercreation form
form2 = Register_Reception(request.POST , request.FILES) #reception profile form
print(form1.is_valid())
print(form1.errors)
print(request.POST['Rpassword'])
return HttpResponse("form submited")
'''
【问题讨论】:
-
嗨,prasad,如果您在问题中间格式化代码 sn-p 以使其更整洁,这个问题将更容易理解并且可能会吸引答案。很难看出 .submit() 返回的是什么
-
所需代码现已更新
标签: python html jquery django ajax