代码之家  ›  专栏  ›  技术社区  ›  thornomad

如何通过Ajax将对象模型发布到视图中?

  •  0
  • thornomad  · 技术社区  · 15 年前

    我之前在工作 hit count question 然后遇到了另一个障碍:如何通过Ajax发布对象的模型信息?

    我用的是通用的 object_detail 查看我的一些模型,我想在调用我的 updapte_object_hit_count 函数(从而跟踪对象的命中数)。

    但是,由于数据是通过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 回复  |  直到 15 年前
        1
  •  1
  •   Brandon    15 年前

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

    当前代码尝试(社区wiki):

    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 }}
    

    我唯一能想到的另一种方法是向模型中添加属性。这样就不需要修改模型了

        2
  •  1
  •   vikingosegundo    15 年前

    使用迈克尔描述的自定义过滤器并使用 django.db.model.get_model 要检索对象,请使用我提供的应用程序名称和模型名称

    要同时检索这两个信息,自定义标记可能比过滤器更有用。

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