【问题标题】:foreign key showing undefined django ajax显示未定义的 django ajax 的外键
【发布时间】:2021-05-12 07:29:45
【问题描述】:

在这种情况下,当用 js 将外键的名称放在 p 标记中时,它显示未定义,但它以正确的用户身份获取输入但无法显示它,因为它说的是未定义

js 代码

$(document).ready(function(){
      // $('#submit').onclick(function(){
      //   $('#message').val=''
      // })
      $(document).on('submit','#post_form',function(e){
        e.preventDefault();

        $.ajax({
            type: 'POST',
            url:"{% url 'create' %}",
            data:{
                message: $('#message').val(),
                csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val(),
                
            },
            success:function(){
                window.location = url;
            }
        });

      });

        setInterval(function()
        {
            $.ajax({
                type:'GET',
                url:"{% url 'comments' %}",
                success:function(response){
                   $('.display').empty();
                   for(var key in response.comments){

这是显示未定义的地方,有什么方法可以将其转换为字符串 console.log(response.cmets[key].user);

                       var temp = "<div class='message_area'><p id='messagetext'>"+response.comments[key].message+"</p></div>"
                       $(".display").append(temp);
                   }
                },
                error:function(response){
                    console.log("no data found")

                }

            }); 
        }, 500);

    });

views.py

def create(request):
if request.method == "POST":
    author = request.user
    message = request.POST['message']

    message = comments(user=author,message=message)
    message.save()

模型

class comments(models.Model):
userId = models.AutoField(primary_key=True)
user = models.ForeignKey(User,on_delete=models.CASCADE)
message = models.CharField(max_length=100,blank=False)
date = models.TimeField(auto_now_add=True)

def __str__(self):
    return f'{self.user} comments'

【问题讨论】:

  • 嗨,首先您不需要在 django 中为模型定义 Id 字段,因为总会有一个自动生成的字段。在create 函数内的views.py 中的第二个,您使用单词message 表示所有内容!为什么?没有任何字符可以使用吗?您在那里所做的事情会导致多次出现异常错误和错误,因此请避免这样做。但是对于这个问题我会写一个答案

标签: javascript jquery django ajax django-templates


【解决方案1】:

在 js 代码中使用 Django 模板语法并没有错,但如果我们不这样做可能会更好。 而不是data:{ message: $('#message').val(); csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val(),}, 它可能是在表单部分内的 html 中编写的。 js可能是:

<form id="form_id" ......>
{% csrf_token %}
 <!-- other fields of the form -->
 </form>

$.ajax({
        type: 'POST',
        url:"{% url 'create' %}",
        data:$("#form_id").serialize();
        success:function(){
            window.location = url;
        }
    });

好吧,这对你的情况来说还不够,你在代码的另一部分有问题。您没有提供返回 cmets 的 views 函数,似乎问题就在那里,此时您可以使用console.log(response.comments[key]); 找出返回的数据然后使用该信息更正代码

【讨论】:

  • 是的,它返回所有 json 响应,但它显示 user_id = 1,这是真的我只创建了一个用户,转换为字符串并显示帖子作者的方法是什么?
  • 你的意思是你需要用户实例而不是 id?
  • 如果是这样,你需要一些魔法;)。而不是返回 json 响应并在 javascript 前端使用数据。创建一个模板文件,使用Djangos built-in render_to_string function 并使用所需的查询集数据呈现一个模板。然后将呈现的模板返回给 ajax,现在向用户显示响应。 render_to_string 不需要请求,将与render 方法相同。在 js 部分,您可以使用 append, innerHtml, ... 将响应附加到页面(dom);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2023-02-21
相关资源
最近更新 更多