【问题标题】:.is_valid() method but is not validating when ajax used.is_valid() 方法,但在使用 ajax 时不验证
【发布时间】: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


【解决方案1】:

我认为您使用的是 jquery,对吗?然后我会尝试像这样序列化表单数据:

reception_data = $("#reception_form").serialize()

也许将 POST 数据发送到表单会更好...

最好, 金戈

【讨论】:

  • is_valid() 不起作用。我通过 request.POST 获取视图中的所有数据
猜你喜欢
  • 2013-04-10
  • 2023-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多