Eu tenho um formulário Django com a RegexField
, que é muito semelhante a um campo de entrada de texto normal.
Na minha opinião, sob certas condições, quero ocultá-lo do usuário e tentar manter o formulário o mais semelhante possível. Qual é a melhor maneira de transformar esse campo em um HiddenInput
campo?
Eu sei que posso definir atributos no campo com:
form['fieldname'].field.widget.attr['readonly'] = 'readonly'
E eu posso definir o valor inicial desejado com:
form.initial['fieldname'] = 'mydesiredvalue'
No entanto, isso não muda a forma do widget.
Qual é a melhor / mais "django-y" / menos "hacky" maneira de tornar esse campo um <input type="hidden">
campo?
fonte
"" is not a valid value for a primary key.
Acabo com um no método is_valid depois de usar esta solução.from django import forms
hidden_field_name = forms.CharField(label='reset', max_length=256, widget=forms.HiddenInput())
onde a chave é a sintaxe mais recente do widget no final. Ajustar para suas necessidades.Isso também pode ser útil:
{{ form.field.as_hidden }}
fonte
uma opção que funcionou para mim, defina o campo na forma original como:
quando você substituí-lo na nova classe, ele manterá seu lugar.
fonte
Em primeiro lugar, se você não deseja que o usuário modifique os dados, parece mais limpo simplesmente excluir o campo. Incluí-lo como um campo oculto apenas adiciona mais dados para enviar por fio e convida um usuário mal-intencionado a modificá-lo quando você não deseja. Se você tiver um bom motivo para incluir o campo, mas ocultá-lo, poderá passar uma palavra-chave arg para o construtor do modelform. Algo assim talvez:
Então, na sua opinião:
Prefiro essa abordagem a modificar as partes internas do modelform na visualização, mas é uma questão de gosto.
fonte
class Meta: exclude = ["fieldname"]
. O problema aqui é que a meta-abordagem é "estática", mas preciso de algo dinâmico. Veja stackoverflow.com/questions/20243735/…Para a forma normal, você pode fazer
Se você possui um modelo, pode fazer o seguinte
Você também pode substituir o
__init__
métodofonte
Se você deseja que o campo esteja sempre oculto, use o seguinte:
fonte
Você pode apenas usar css:
Isso tornará o campo e seu rótulo invisíveis.
fonte