是否可以在Ajax中成功调用Django外键对象?

时间:2017-10-09 11:35:39

标签: jquery python ajax django

是否可以在Ajax中成功调用Django外键对象?

models.py

class Message(models.Model):
id = models.AutoField(primary_key=True)
chat = models.ForeignKey(Chat, models.CASCADE, null=True, related_name='chat')
message = models.CharField(max_length=5000)
date = models.DateTimeField(auto_now_add=True)

views.py

def message_view(request):
    chatid = request.GET.get('chatid', None)
    messages =  Message.objects.filter(chat__id=chatid)
    message_list = list(messages.values())

    data = { 'message_list': message_list }
    return JsonResponse(data)

chatoverview.html

 $(document).ready(function(){
                $(".btn_load_messages").click(function(){
                    var chatid = $(this).val();

                    $.ajax({
                        url:'/ajax/messages',
                        data: {
                            'chatid': chatid
                        },
                        dataType: 'json',
                        success: function(data){
                                var message_list = data.message_list;
                                var requestuser = "{{ request.user.id }}"
                                $(".container-text2").empty();
                                $.each(message_list, function(index, value){
                                    $(".container-text2").
                                  append("<div class=text1>"+ value.message +"</div>"); 
                                });                             
                        }
                    });
                });
            });

我需要chat.buyer.id。所以我会做类似的事情:

 $(".container-text2").append("<div class=text1>"+ value.chat.buyer.id +"</div>");

但这不起作用。可以这样做吗?如果是的话,你能告诉我我需要改变什么才能让它发挥作用吗?

1 个答案:

答案 0 :(得分:1)

不,你不能这样做。即使JS以某种方式了解您的模型,它也无法访问数据,因为它在浏览器上运行,而不是服务器。

您需要在JsonResponse中提供所需的所有信息。您可以通过for循环或列表推导手动建立数据;或者,如果你做了很多这样的事情,你应该调查django-rest-framework,它的序列化程序允许你自定义模型的JSON表示。