You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:52:21