我正在使用一个can delete=True的表单集。我想将DELETE字段的小部件更改为隐藏输入。我好像找不到一个好办法来做这件事。我试过的是:
将表单的小部件更改为HiddenInput和/或在表单定义中添加隐藏字段:
class MyForm(ModelForm):
DELETE = forms.BooleanField(widget=forms.HiddenInput)
class Meta:
model = MyModel
widgets = {'DELETE' : forms.HiddenInput}
在更改表单集后执行上述操作
class MyFormSet(BaseModelFormSet):
def add_fields(self, form, index):
originalDeletion = None
if DELETION_FIELD_NAME in form.fields:
originalDeletion = form.fields[DELETION_FIELD_NAME]
super(MyFormSet, self).add_fields(form,index)
if originalDeletion is not None:
form.fields[DELETION_FIELD_NAME] = originalDeletion
如果我同时执行这两个操作,它确实会将字段更改为hidden,但这看起来有点麻烦(实际上覆盖了通常的add_fields方法)。你该怎么做?
==编辑==
结果发现,无论如何,使用隐藏字段对表单框架都不是很好。你绝对应该使用一个复选框并用css隐藏它。如果您想在Django中调整复选框的css,我仍然认为您必须如上所述更改add_fields方法,这样您就可以更改小部件的css。
将
self.can_delete
设置为False
解决了我的问题:完成所需任务的最短代码是:
不能将其视为黑客,因为在Django的官方文档中提到过:
https://docs.djangoproject.com/en/1.4/topics/forms/formsets/#adding-additional-fields-to-a-formset
Django来源如下:
如果输入为type=hidden,或者输入为type=checkbox和display:none,则不会更改任何内容。
在CSS中优雅的方式是这样的:
或者在JavaScript中:
或者,在管理员中:
这似乎是一个更好的方向,因为:
相关问题 更多 >
编程相关推荐