将数据发送到服务器时,服务器将始终以字符串的形式接收/处理它。除非你使用Django表单来处理数据。在这种情况下,Django会发挥魔力并将所有内容转换为适当的类型。
如果您发送使用AJAX的数据,你也许可以只使用$('#add_member_Form').serialize()代替$('#add_member_Form').serializeArray(),像这样:
$.ajax({
url: 'members/new/',
type: 'post',
data: $('#add_member_Form').serialize(),
success: function (data) {
// do whatever with the data
}
});
而现在考虑到你在HTML以下输入:
名字
姓氏
性别
您将能够检索这个数据是这样的:
def add_member(request):
first_name = request.POST.get('first_name')
last_name = request.POST.get('last_name')
try:
gender = int(request.POST.get('gender')) # try to convert the string to int
except ValueError: # the post data was not a valid integer
gender = 1 # fallback to a default value? the ideal case would run a validation using a proper Form
member = Member.objects.create(first_name=first_name, last_name=last_name, gender=gender)
return redirect('members_list')
但是,你可以进一步采取的步骤,并使用Django表单,像这样:
from django import forms
from .models import Member
class MemberForm(forms.ModelForm):
class Meta:
model = Member
fields = ('first_name', 'last_name', 'gender',)
然后在视图,你可以简单地做这样的事情:
def add_member(request):
if request.method == 'POST':
form = MemberForm(request.POST) # here Django will process your form, convert all the data types
if form.is_valid(): # Then you can save the data that came from the Ajax request, or do whatever
form.save()
return redirect('members_list')
else:
form = MemberForm()
return render(request, 'add_member.html', {'form': form})