如何最好地将对象的 slug 从 Listview 获取到 Django 表单

How best to get the slug of an object from a Listview into a Django form

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

感谢您提供的任何意见。


您可以创建一个自定义过滤器来初始化这样的表单。假设隐藏的输入字段在您的表单中命名为 slug,代码可能应该是:

1
2
3
4
5
6
7
from django import template
register = template.Library()

@register.filter
def setslug(form, slugval):
    form.initial['slug'] = slugval
    return form

现在你可以从你的模板中调用它为 {{ form|setslug:slugfield }}


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

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