如何将HTML5地理定位数据保存至Django Admin?现有代码调试求助
解决方案:修复JavaScript地理定位数据保存到Django Admin的问题
我看了你的代码,发现几个关键问题导致数据没法成功保存到Django Admin,咱们一步步来修复:
1. 修正Ajax请求的目标地址
你的script.js里把POST请求发到了"/ajax/",但你的ajax/urls.py中,处理数据插入的路由是^insert$(对应/ajax/insert),地址不匹配导致请求找不到对应的视图处理函数。
修改script.js中的请求地址:
$(document).ready(function() { $demo = $("#demo"); $('#btn_submit').on('click', function() { var data = pos.coords; data.csrfmiddlewaretoken = $('input[name=csrfmiddlewaretoken]').val(); // 把请求地址改为/ajax/insert $.post("/ajax/insert", data, function() { alert("Saved Data!"); }); }); });
2. 在Admin中注册Member模型
你没有提供ajax/admin.py的代码,大概率是没把Member模型注册到Django Admin,所以即使数据存进数据库,Admin页面也看不到记录。
在ajax/admin.py中添加注册代码:
from django.contrib import admin from .models import Member # 注册Member模型到Admin admin.site.register(Member)
3. 完善视图的请求判断与类型转换
你的insert视图没有判断请求方法,也没处理前端传值到Decimal字段的类型转换,可能导致服务器内部错误。
修改ajax/views.py的insert函数:
from django.shortcuts import render, redirect from .models import Member from decimal import Decimal # 导入Decimal用于类型转换 def index(request): return render(request, 'ajax/index.html') def insert(request): # 只处理POST请求 if request.method == 'POST': # 手动转换为Decimal类型,避免前端字符串转Decimal出错 latitude = Decimal(request.POST.get('latitude')) longitude = Decimal(request.POST.get('longitude')) member = Member(latitude=latitude, longitude=longitude) member.save() return redirect('/') # 非POST请求重定向回首页 return redirect('/ajax/')
4. 调试小技巧
如果还是有问题,打开浏览器开发者工具(F12)的Network标签,查看POST请求的状态码:
- 404:说明请求地址还是错的,再检查路由配置
- 500:服务器内部错误,查看Django的控制台日志,通常是类型转换或模型字段不匹配的问题
- 200:请求成功,此时去Django Admin就能看到保存的经纬度数据了
内容的提问来源于stack exchange,提问作者moonfairy
相关产品推荐
相关产品推荐

