Search code examples
pythonhtmldjangodjango-forms

Change a Django form field to a hidden field


I have a Django form with a RegexField, which is very similar to a normal text input field.

In my view, under certain conditions I want to hide it from the user, and trying to keep the form as similar as possible. What's the best way to turn this field into a HiddenInput field?

I know I can set attributes on the field with:

form['fieldname'].field.widget.attr['readonly'] = 'readonly'

And I can set the desired initial value with:

form.initial['fieldname'] = 'mydesiredvalue'

However, that won't change the form of the widget.

What's the best / most "django-y" / least "hacky" way to make this field a <input type="hidden"> field?


Solution

  • If you have a custom template and view you may exclude the field and use {{ modelform.instance.field }} to get the value.

    also you may prefer to use in the view:

    field = form.fields['field_name']
    field.widget = field.hidden_widget()
    

    but I'm not sure it will protect save method on post.

    edit: field with multiple values don't supports HiddenInput as input type, so use default hidden input widget for this field instead.