Django,如何使用ajax jquery在表单提交时编写视图?

时间:2013-11-19 05:51:45

标签: jquery python ajax django

我这里有一个模特

class personaldetails(models.Model):
    fname=models.CharField(max_length=30)
    lname=models.CharField(max_length=30)
    email=models.CharField(max_length=30)
    mbleno=models.IntegerField()
    maritalstatus=models.CharField(max_length=30)
    currentindustry=models.CharField(max_length=30)
    functionalarea=models.CharField(max_length=30)
    annualsalary=models.CharField(max_length=30)

views.py

def personalinformation(request):
    print "hello"
    if request.method=='POST':
        print "hi"
        fn=request.POST.get('fname')
        print fn
        ln=request.POST.getlist('lname')
        email=request.POST.getlist('email')
        mno=request.POST.getlist('mbleno')
        ms=request.POST.getlist('maritalstatus')
        ci=request.POST.getlist('currentindustry')
        fc=request.POST.getlist('functionalarea')
        ans=request.POST.getlist('annualsalary')
        personaldetails(fname=fn,lname=ln,email=email,mbleno=mno,maritalstatus=ms,currentindustry=ci,functionalarea=fc,annualsalary=ans).save()
        s="example"
        return HttpResponse(s,mimetype='application/json')
    return render(request,"itechdisplay.html")      

my itechdisplay.html

<html>
<head>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
    $('#formid').submit(function(){
    $.ajax({
         type:$(this).attr('method'),
        data:$(this).serialize(),
        url:'/personalinformation/',
        success:function(data) {
        alert($(data));
}
  });
    });
});
</script>
</head>
<body>
<form action="." id="formid" method="post">{% csrf_token %}

Firstname:<input type="text" id="firstname" name="input1"><br>
Lastname:<input type="text" id="lastname" name="input2"><br>
e-mail:<input type="text" id="email" name="input4"><br>
mobileno:<input type="text" id="mobleno" name="input5"><br>
Maital status:<select id="maritalstatus">
<option value="s1" selected>single</option>
<option value="s1">married</option>
<option value="s1">divorsed</option>
<option value="s1">other</option>
</select><br>
Current industry<select id="currentindustry">
<option value="s1">IT-software/software sevices</option>
<option value="s1" selected>it-hardware/networking</option>
<option value="s1">insurance</option>
<option value="s1">other</option>
</select><br>
Functional area:<select id="functionalarea">
<option value="s1" selected>IT-software</option>
<option value="s1">it-hardware</option>
<option value="s1">agent</option>
<option value="s1">other</option>
</select><br>
Annual salary<select id="annualsalary">
<optgroup label="Hour wise">
<option value="s1">less than 40$/hr</option>
<option value="s1">40-50$/hr</option>
<option value="s1">50-60$/hr</option>
<option value="s1">above 60$</option>
</optgroup>
<optgroup label="month wise">
<option value="s1">less than 20,000$</option>
<option value="s1">20-30,000$</option>
<option value="s1">30-40,0000$</option>
<option value="s1">above 40,000$</option>
</optgroup>
</select><br>
<input type="submit" id="save1" value="save">
</form>
</body>
</html>

我写了一个模型。 在我的模板中,我想使用post方法。当我提交表单时,我希望将详细信息移动到视图并将其存储在数据库中并检索它以进行显示。我不知道如何编写视图来从模板中提取数据。我试过,如上所述。 但我得到如下错误

int() argument must be a string or a number, not 'list'

在我的views.py

的以下一行中
personaldetails(fname=fn,lname=ln,email=email,mbleno=mno,maritalstatus=ms,currentindustry=ci,functionalarea=fc,annualsalary=ans).save()

如何写视图?任何方法都可以被欣赏..提前感谢

1 个答案:

答案 0 :(得分:1)

一个不使用你的模型的简单版本(我会把它留给你作为练习)

def my_ajax_view(request):
    if request.is_ajax():
        if request.method == 'POST':
            //do you logic here
            response_data = {'success': 'weee'}
            return HttpResponse(json.dumps(response_data), content_type="application/json")
        else:
            return HttpResponseForbidden()
    return HttpResponseForbidden() 

这是你编写正常函数ajax视图的方法。 现在来看你遇到的错误。 首先,我建议你不要命名你的变量mc, mmo, ans, cifunc,基本上这使得任何人(甚至你会在一天内忘记你所写的东西)调试它会变得难100倍。

其次,您在getlist()上使用POST。这将为您提供一个包含信息的列表,当您尝试保存它时,您的IntegerField mbleno需要一个整数或字符串而不是列表。

我会尝试切换

mno=request.POST.getlist('mbleno')

mno=request.POST.get('mbleno')

最有可能会给你带来其他错误,但这是一个好的开始!