django - 在 Django 表单集中隐藏 can_delete 字段
问题描述
我有一个使用 formset_factory() 创建的表单集,其中 can_delete 选项设置为 true
在我的 html 模板中,每个表单都使用 form.as_p 函数显示,因此我无法访问每个 html 元素
可以删除字段由模板显示为复选框,我想隐藏它。
我可以手动渲染表单并修改适当的标签,但由于该表单中有很多字段,似乎有很多代码只是为了隐藏一个元素
我也可以在客户端使用 javascript 或 css,如此处所述
但是我怀疑可能有一种更简洁的方法来做到这一点。
我在文档中读到还有一个类似于 can_delete 的 can_order 字段,也可以在创建表单集时激活。这个 can_order 字段可以通过创建一个具有适当属性的表单集类来隐藏:
from django.forms import BaseFormSet, formset_factory
from myapp.forms import ArticleForm
class BaseArticleFormSet(BaseFormSet):
ordering_widget = HiddenInput
ArticleFormSet = formset_factory(ArticleForm, formset=BaseArticleFormSet, can_order=True)
我想知道是否可以使用 can_delete 字段做类似的事情。就像是 :
can_delete_widget = HiddenInput
代替
ordering_widget = HiddenInput
我完全错了,在那种情况下javascript/css应该是我的朋友吗?
解决方案
您可以覆盖这样的add_fields
方法BaseFormSet
。这也适用于 Django 2.2(ordering_widget
在 3.0 中添加):
class MyFormSetBase(BaseFormSet):
def add_fields(self, form, index):
""" hide ordering and deletion fields """
super().add_fields(form, index)
if 'ORDER' in form.fields:
form.fields['ORDER'].widget = forms.HiddenInput()
if 'DELETE' in form.fields:
form.fields['DELETE'].widget = forms.HiddenInput()
MyFormSet = formset_factory(MyForm, formset=MyFormSetBase, extra=1, can_delete=True, can_order=True)
推荐阅读
- regex - 正则表达式在行尾去除换行符
- session - Keras 模型与后端会话的关系
- r - geom_ribbon 用于可变级别
- facebook-graph-api - Facebook APP,拦截其他域的api调用
- multithreading - 多通道信号处理:线程架构
- java - 由 java.lang.NoSuchMethodError 引起:org.mockito.internal.util.MockUtil.getMockSettings(Ljava/lang/Object;)Lorg/mockito/mock/MockCreationSettings;
- php - php + mysql 大查询,循环问题
- docusignapi - 一个人的 DocuSign API 多个角色
- haskell - 如何在 Haskell 中创建结合状态和错误的 monad
- laravel - Laravel Voyager 管理面板中的多级菜单不起作用