【问题标题】:Passing the complete Object Instance, NOT just the object id, from a Django template to view从 Django 模板传递完整的对象实例,而不仅仅是对象 id 以查看
【发布时间】:2015-02-11 10:31:27
【问题描述】:

我正在尝试将 django 模板中的完整对象实例作为与复选框输入关联的值传递给我的视图。当我尝试这样做时,我只能获得对象的 unicode 方法表示,因此无法访问我视图中对象的任何特定字段。

是否有一种方法可以将实际对象从模板传递到视图,或者是否有一种方法可以在视图中使用该 unicode 表示来访问实际对象及其相应的字段? 我不想使用 'publication.id' 作为我的复选框值,因为我不能保证 id 永远不会改变。

当前代码:

mytemplate.html
    <form method="get" action="processData">
        {% for publication in mydata %}
            <input type="checkbox" name="item-selection" value="{{publication}}">
        {% endfor % }

view.py
    items = request.GET.getlist('item-selection')
    for x in items:
        print x         # this prints the unicode mehtod's return value
        x.datafield1    # I want to access each object's data    

【问题讨论】:

    标签: django django-forms django-templates


    【解决方案1】:

    不,这不可能:从浏览器向视图发送数据是通过 HTTP post 完成的,您只能发布数据,不能发布对象。

    但是您自己已经说过解决方案:使用 ID。谁在乎ID是否改变?重要的是您获得当前的 ID。

    <input type="checkbox" name="item-selection" value="{{publication.id}}"><label>{{ publication.name }}</label>
    

    ...

    item_ids = request.GET.getlist('item-selection')
    items = Item.objects.filter(id__in=item_ids)
    

    【讨论】:

    • 啊,好的,谢谢!我不确定对象本身是否可以以某种方式作为数据传递,然后将该数据“重新创建”回视图中的对象。 (对不起我的天真-我一直在阅读文档,但有时会错过大局)无论如何,我非常感谢您的帮助! @丹尼尔罗斯曼
    猜你喜欢
    • 2015-06-29
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多