2017-10-09 14 views
0

Ajaxの成功のためにDjango Foreign Keyオブジェクトを呼び出すことは可能ですか?Ajaxの成功のためにDjango Foreign Keyオブジェクトを呼び出すことは可能ですか?

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

いいえ、できません。たとえJSがあなたのモデルについて何とか知っていたとしても、サーバーではなくブラウザ上で実行されているため、データにアクセスすることはできません。

JsonResponseに必要なすべての情報を入力する必要があります。 forループまたはリスト内包を介して手動でデータを構築することができます。代わりに、このようなことをたくさん行っている場合は、シリアライザを使用してモデルのJSON表現をカスタマイズできるdjango-rest-frameworkを調べるべきです。

関連する問題