如何通过ajax在视图中发布对象的模型?

时间:2009-10-22 23:54:41

标签: jquery ajax django

正在处理我之前的hit count question并遇到另一个绊脚石:如何通过ajax发布对象的模型信息?

我正在为我的许多模型使用通用object_detail视图,我想在调用我的updapte_object_hit_count函数的模板中添加一些ajax(从而跟踪对象的命中数)。

但由于数据是通过json / ajax传递的,我不知道我是如何确定我正在使用的模型/对象。

例如,我想做什么(jQuery):

$(document).ready(function() {

    var data = {
        model : "{{ object.model }}", // this doesn't work, obviously
        pk    : "{{ object.pk }}",
        };

    $.post('{% url update_object_hit_count %}',data);

});

在我看来,聪明的东西如下:

def update_object_hit_count(request):
    post = request.POST.copy() 
    model = post['model']
    obj = model.objects.get(pk=post['pk'])
    # more stuff using this obj

关于如何实现这一目标的任何想法?我以为我可以使用ContentType但不确定如何......

2 个答案:

答案 0 :(得分:1)

您可以创建自定义过滤器(django docs)。

当前代码尝试(社区维基):

from django import template

register = template.Library()

@register.filter
def app_label(value):
    """Return an object's app_label"""
    try:
        return value._meta.app_label
    except:
        pass

@register.filter
def object_name(value):
    """Return an object's object_name"""
    try:
        return value._meta.object_name
    except:
        pass

然后在你的模板中:

{% load ... %}

{{ object|app_label }}
{{ object|object_name }}

我能想到的另一种方法是在模型中添加属性。这意味着您不必修改模型

答案 1 :(得分:1)

使用michael描述的自定义过滤器并使用django.db.model.get_model检索我提供的应用名称和型号名称的对象

要一次检索这两种信息,自定义标记可能比过滤器

更有用

本文中有关get_model的更多信息:http://www.b-list.org/weblog/2006/jun/07/django-tips-write-better-template-tags/