Aqui está a declaração do campo em um formulário:
max_number = forms.ChoiceField(widget = forms.Select(),
choices = ([('1','1'), ('2','2'),('3','3'), ]), initial='3', required = True,)
Gostaria de definir o valor inicial como 3
e isso não parece funcionar. Eu brinquei com o parâmetro, aspas / sem aspas, etc ... mas nenhuma mudança.
Alguém poderia me dar uma resposta definitiva se for possível? E / ou o ajuste necessário no meu trecho de código?
Estou usando Django 1.0
django
django-models
django-forms
thebiglife
fonte
fonte
Respostas:
Tente definir o valor inicial ao instanciar o formulário:
fonte
'3'
correspondente ao primeiro valor da tupla ou o segundo?Isso não toca na questão imediata em questão, mas esta pergunta / resposta surge para pesquisas relacionadas à tentativa de atribuir o valor selecionado a a
ChoiceField
.Se você já chamou
super().__init__
sua classe Form, deve atualizar oform.initial
dicionário, não afield.initial
propriedade. Se você estudarform.initial
(por exemplo,print self.initial
após a chamada parasuper().__init__
), ele conterá valores para todos os campos. Ter um valor deNone
naquele dict substituirá ofield.initial
valor.por exemplo
fonte
Você também pode fazer o seguinte. em sua classe de formulário def:
então, ao chamar o formulário em sua visualização, você pode definir dinamicamente as opções iniciais e a lista de opções.
Nota: os valores iniciais devem ser uma lista e as opções devem ser 2 tuplas, no meu exemplo acima eu tenho uma lista de 2 tuplas. Espero que isto ajude.
fonte
initial
refere-se à chave do item a ser selecionado, não ao seu índice. Levei algumas tentativas para resolver isso!Também encontrei esse problema e descobri que o problema está no navegador. Quando você atualiza o navegador está preenchendo novamente o formulário com os mesmos valores de antes, ignorando o campo marcado. Se você visualizar a fonte, verá que o valor verificado está correto. Ou coloque o cursor no campo URL do seu navegador e pressione Enter. Isso irá recarregar o formulário do zero.
fonte
As respostas de Tom e Burton funcionam para mim eventualmente, mas eu tive um pouco de dificuldade para descobrir como aplicá-las a um
ModelChoiceField
.O único truque é que as escolhas são armazenadas como tuplas de
(<model's ID>, <model's unicode repr>)
, então se você quiser definir a seleção inicial do modelo, você passa o ID do modelo como o valor inicial, não o objeto em si ou seu nome ou qualquer outra coisa. Então é tão simples como:Alternativamente, o
initial
argumento pode ser ignorado no lugar de uma linha extra com:fonte
GET
solicitação e defini-lo de dentro de uma visualização.Dave - alguma sorte em encontrar uma solução para o problema do navegador? Existe uma maneira de forçar uma atualização?
Quanto ao problema original, tente o seguinte ao inicializar o formulário:
fonte
Instances should always modify self.fields; they should not modify self.base_fields.
Para ter certeza, preciso ver como você está renderizando o formulário. O valor inicial só é usado de forma desvinculada, se for vinculado e um valor para aquele campo não for incluído, nada será selecionado.
fonte
Experimente isso funciona para mim, eu adicionei isso em models.py
fonte
TypeError at /my/url/ __init__() got an unexpected keyword argument 'default' Request Method: GET Request URL: http://localhost:8000/my/url/ Django Version: 1.8.1 Exception Type: TypeError Exception Value: __init__() got an unexpected keyword argument 'default'