【问题标题】:How best to get the slug of an object from a Listview into a Django form如何最好地将对象的 slug 从 Listview 获取到 Django 表单
【发布时间】:2014-02-02 21:12:19
【问题描述】:

我有一个 Django ListView/FormView 组合,其中页面列表中的每个对象都有一个用于切换模式表单的按钮。表单有一个隐藏字段,我想用它来自的列表中的对象的 slug 预填充它(即,不是页面的 slug,而是该页面上列表中的对象)。我能想到的一种方法是让 {{ form }} 标记以某种方式接受对象的 slug 作为参数 - 例如 {{ form object_instance=object.slug }}。我该怎么做?以及如何在 ListView 中调用它?

感谢您提供的任何意见。

【问题讨论】:

    标签: django django-forms django-views django-templates


    【解决方案1】:

    您可以创建一个custom filter 来初始化这样的表单。假设隐藏输入字段在您的表单中命名为slug,代码大概应该是:

    from django import template
    register = template.Library()
    
    @register.filter
    def setslug(form, slugval):
        form.initial['slug'] = slugval
        return form
    

    现在您可以在模板中将其调用为{{ form|setslug:slugfield }}

    【讨论】:

    • 这非常好,正是我想要的。顺便说一句,当您回答时,它与模板中的 {{ form|setslug... }} 一起工作得很好。但是,它会出现 {{ form.as_p|setslug... }} 错误,并带有“'SafeUnicode' object has no attribute 'initial'”错误。在我的情况下这并不重要,但对于其他看到这个问题的人来说,我不太确定为什么会这样。非常感谢
    【解决方案2】:

    如果列表的每一行都有一个表单,只需确保表单上下文中存在 slug。

    如果您只有一个表单并根据用户的操作更改其内容,您将不得不求助于 JavaScript。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      • 2018-05-28
      相关资源
      最近更新 更多