是否可以在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>");
但这不起作用。可以这样做吗?如果是的话,你能告诉我我需要改变什么才能让它发挥作用吗?
答案 0 :(得分:1)
不,你不能这样做。即使JS以某种方式了解您的模型,它也无法访问数据,因为它在浏览器上运行,而不是服务器。
您需要在JsonResponse中提供所需的所有信息。您可以通过for循环或列表推导手动建立数据;或者,如果你做了很多这样的事情,你应该调查django-rest-framework,它的序列化程序允许你自定义模型的JSON表示。