我想在对选定对象进行更改之前为它们创建一个确认页面(在管理员之外)。对象可以是不同的模型(但一次只有一个模型)。
这很像删除前在管理中所做的。但是管理代码很复杂,我还没有掌握它是如何在那里完成的。
首先,我有几个表单以不同方式过滤对象,然后我将查询集传递给操作/确认页面。我创建了一个表单工厂,以便我可以根据模型定义不同的查询集(如 Stackoverflow 的另一个类似问题所示):
def action_factory(queryset):
''' Form factory that returns a form that allows user to change status on commissions (sale, lead or click)
'''
class _ActionForm(forms.Form):
items = forms.ModelMultipleChoiceField(queryset = queryset, widget=forms.HiddenInput())
actions = forms.ChoiceField(choices=(('A', 'Approve'), ('D' ,'Deny'), ('W' ,'Under review'), ('C' ,'Closed')))
return _ActionForm
我认为我使用的是:
context['form']=action_factory(queryset)()
问题是 items 字段在隐藏时根本不会显示在 html 代码中。当我删除 HiddenInput 小部件时,它会正确显示表单。
我不想显示选择字段,因为可能有数千个对象。我想要的只是“你想改变 1000 个对象的状态吗”以及一个弹出窗口和一个提交按钮。这似乎是一个足够简单的问题,但我无法让它工作。
如果有人对我目前的尝试有解决方案,我会很高兴听到他们是如何做到的。如果有更清洁和更好的解决方案,那就更好了。