我正在使用带有can_delete = True的formset.我想将DELETE字段的小部件更改为隐藏的输入.我似乎无法找到一个好方法来做到这一点.我试过的是:
将表单的窗口小部件更改为HiddenInput和/或在窗体定义中添加隐藏字段:
class MyForm(ModelForm):
DELETE = forms.BooleanField(widget=forms.HiddenInput)
class Meta:
model = MyModel
widgets = {'DELETE' : forms.HiddenInput}
Run Code Online (Sandbox Code Playgroud)
通过更改formset执行上述操作
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
Run Code Online (Sandbox Code Playgroud)
如果我这样做,它实际上确实将字段更改为隐藏,但这似乎有点像黑客(有效地覆盖了通常的add_fields方法).你怎么这么做的?
==编辑==
事实证明,无论如何,使用隐藏字段对于表单框架来说并不是那么好.你绝对应该使用一个复选框并用css隐藏它.如果你想调整Django中复选框的CSS,我仍然认为你必须改变上面的add_fields方法,然后允许你改变小部件的CSS.
Tom*_*ski 23
完成所需的最短代码是:
class MyFormSet(BaseFormSet):
def add_fields(self, form, index):
super(MyFormSet, self).add_fields(form, index)
form.fields[DELETION_FIELD_NAME].widget = forms.HiddenInput()
Run Code Online (Sandbox Code Playgroud)
它不能被视为黑客,因为它在官方Django文档中提到:
https://docs.djangoproject.com/en/1.4/topics/forms/formsets/#adding-additional-fields-to-a-formset
Django的消息来源:
jpi*_*pic 10
如果输入的类型为= hidden,或者类型为= checkbox 且 display:none ,则不会更改任何内容.
恕我直言CSS中的优雅方式将如下所示:
td.delete input { display: none; }
Run Code Online (Sandbox Code Playgroud)
或者在JavaScript中:
$('td.delete input[type=checkbox]').hide()
Run Code Online (Sandbox Code Playgroud)
或者,在管理员中:
django.jQuery('td.delete input[type=checkbox]').hide()
Run Code Online (Sandbox Code Playgroud)
这似乎是一个更好的方向,因为: