【问题标题】:Ajax is not saving data in DataBaseAjax 不在数据库中保存数据
【发布时间】:2021-06-11 19:55:36
【问题描述】:

我正在构建一个 BlogApp,但遇到了一个问题。

我要做什么

我正在尝试通过JavaScript 访问用户的位置并将模型的实例保存在数据库中。

访问位置工作正常。但是保存不起作用

问题

位置所在的城市未保存在数据库中。当我刷新页面时,它不会保存在数据库中。

models.py

     class Profile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE,default='',unique=True)
        full_name = models.CharField(max_length=100,default='')
        city = models.CharField(max_length=30,default='')

views.py

def func(request):
    city = request.GET.get('city')
    city.save()

    message = 'Updated'
    return HttpResponse(message)

模板 (.html)

# Getting city name ( first javascript code ) through IP is working.

<script>

$.ajax({
  url: "https://geolocation-db.com/jsonp",
  jsonpCallback: "callback",
  dataType: "jsonp",
  success: function(location) {
    $('#city').html(location.city);

  }
});

</script>



#This code is for send data to Django.

<script>

    $("city").change(function)(){
        const city = 'city';
        $.ajax({
            url ="{% url 'mains:func' %}",
            data = {
                'city':city,
            } ,
            success.function(data){
                console.log("Update");
            }
        });

    };

</script>


<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

    <div>City: <span id="city"></span></div>

我不知道问题出在哪里。

任何帮助将不胜感激。

提前致谢。

【问题讨论】:

  • 在写入city = request.GET.get('city') 之后,变量city 将包含一个字符串,该字符串具有在get 参数中发送的任何值(如果发送了参数,否则这将是None)。在这你写city.save() 这没有意义(str 甚至没有保存属性/方法你会在那里得到一个错误)
  • 那么,如何保存呢?
  • 我相信您想更改当前用户的个人资料?您可以通过profile = request.user.profile获取个人资料
  • 是的,获取request.user.profile 有什么意义?我的意思是得到它有什么用?
  • 既然你想更新配置文件实例显然你需要它......你稍后会写类似profile.city = city然后profile.save()......

标签: javascript python html django ajax


【解决方案1】:

您需要更新属于请求中引用的用户的配置文件实例。 (这是假设请求是针对已登录用户的)。

def func(request):
    city = request.GET.get('city')
    user = request.user
    profile = Profile.objects.get(user=user)
    profile.city = city
    profile.save()
    message = 'Updated'
    return HttpResponse(message)

【讨论】:

  • 这仍然没有保存。我需要添加formsubmit button 以将其保存在db 中吗?
  • 这行得通。为什么你认为它没有保存?如果代码不起作用,您需要调试代码。我建议您在更改之前打印出配置文件,然后再查看是否有更改。
  • 因为我在Admin 中检查了它。城市还是空白
  • 这将向我表明 city 是视图函数中的一个空字符串,因此问题出在客户端。同样,您需要调试代码才能看到错误。
  • 当我 inspect 时,它会显示 Uncaught SyntaxError: Unexpected token ')'。符合$("city").change(function)(){
猜你喜欢
  • 1970-01-01
  • 2014-05-20
  • 2019-09-29
  • 2013-05-17
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 2013-11-04
  • 1970-01-01
相关资源
最近更新 更多