Tengo un formulario Django con a RegexField
, que es muy similar a un campo de entrada de texto normal.
Desde mi punto de vista, bajo ciertas condiciones quiero ocultarlo al usuario e intentar mantener el formulario lo más similar posible. ¿Cuál es la mejor manera de convertir este campo en un HiddenInput
campo?
Sé que puedo establecer atributos en el campo con:
form['fieldname'].field.widget.attr['readonly'] = 'readonly'
Y puedo establecer el valor inicial deseado con:
form.initial['fieldname'] = 'mydesiredvalue'
Sin embargo, eso no cambiará la forma del widget.
¿Cuál es la mejor / más "django-y" / menos "hacky" para hacer de este campo un <input type="hidden">
campo?
fuente
"" is not a valid value for a primary key.
Termino con un método is_valid después de usar esta solución.from django import forms
hidden_field_name = forms.CharField(label='reset', max_length=256, widget=forms.HiddenInput())
donde la clave es la sintaxis de widget más reciente al final. Ajusta tus necesidades.Esto también puede ser útil:
{{ form.field.as_hidden }}
fuente
una opción que funcionó para mí, defina el campo en la forma original como:
luego, cuando lo anula en la nueva Clase, mantendrá su lugar.
fuente
En primer lugar, si no desea que el usuario modifique los datos, entonces parece más claro simplemente excluir el campo. Incluirlo como un campo oculto solo agrega más datos para enviar a través del cable e invita a un usuario malintencionado a modificarlo cuando no lo desee. Si tiene una buena razón para incluir el campo pero ocultarlo, puede pasar una palabra clave arg al constructor de la forma de modelo. Algo como esto quizás:
Entonces en tu opinión:
Prefiero este enfoque para modificar las partes internas del modelo en la vista, pero es cuestión de gustos.
fuente
class Meta: exclude = ["fieldname"]
. El problema aquí es que el Meta-enfoque es "estático", pero necesito algo dinámico. Ver stackoverflow.com/questions/20243735/…Para forma normal puedes hacer
Si tiene un modelo de formulario, puede hacer lo siguiente
También puedes anular el
__init__
métodofuente
Si desea que el campo esté siempre oculto, use lo siguiente:
fuente
Puedes usar css:
Esto hará que el campo y su etiqueta sean invisibles.
fuente