25.10
O Django traz embutido consigo um recurso(ChoiceField) muito utilizado para criação de campos ’select box’ em formulários que não necessitam que seus dados sejam gravados em um banco de dados, como por exemplo um formulário que tenha um select box que liste as categorias de filmes de uma locadora, e que ao selecionar um item na lista mande uma requisição para o servidor trazendo todos os filmes relacionados aquela categoria.
Porém os campos ChoiceField que são preenchidos com objetos resultantes do banco de dados, não atualizam seus itens a cada nova inserção no banco de dados, esse problema ocorre pois a classe do form é criada apenas uma vez durante a execução do servidor, e como a queryset é transformada na lista de itens durante a criação do form, ela só é evaluada uma vez. Para solucionar esse problema é necessário atribuir o choices no __init__ do seu formulário, algo parecido com isso:
01 class Categoria(forms.Form):02 03 def __init__(self, *args, **kwargs):04 super(MeuForm, self).__init__(*args, **kwargs)05 self.fields['busca_categorias'].choices = [ ... ]06 07 #busca todas as categorias de filmes08 busca_categorias = Categoria.objects.values_list('slug','nome')09 10 #lista todas as categorias resultantes da queryset11 categorias = forms.ChoiceField(busca_categorias)
Não há comentários ainda.
Deixe seu comentário