/ / django change model form instance - python, django

instância do formulário de modelo de mudança do django - python, django

Existe alguma maneira fácil de alterar a instância de um formulário de modelo do Django depois que ele foi inicializado?

Por exemplo, o seguinte preencheria previamente o formulário em um modelo com o conteúdo atualmente no banco de dados do objeto com um ID 1:

form = exampleModelForm(instance = Model.objects.get(pk=1)

Isso também salvará o objeto relevante quando save () for chamado, em vez de criar um novo.

Onde isso criará um novo objeto e não preencherá previamente o formulário no modelo:

form = exampleModelForm()

Como estou retornando um formulário em branco de outrométodo, eu gostaria de atribuir uma instância a ela depois que ela foi criada e alterar o objeto para que ele possa ser salvo e o modelo seja preenchido previamente com os valores existentes no banco de dados. Quero algo parecido com isto, mas o que eu tentei não parece funcionar:

form = methodThatGetsForm(somearg)
form.instance = ExampleModel.objects.get(pk = getId(somearg))

Existe uma função simples que estou perdendo aqui?

Respostas:

2 para resposta № 1

Eu não testei isso, mas gostaria de saber se você pode reinicializar um novo formulário com os dados do formulário retornados e a instância como o novo objeto.

form = methodThatGetsForm(somearg)
new_form = ExampleModelForm(form.cleaned_data, instance=ExampleModel.objects.get(pk=getID(somearg)))
new_form.save()

Caso contrário, deve haver uma maneira de obter os dados como um dicionário de pares de chave / valor para os campos do form retornado, usando "s ._meta dados. Eu acho que se você enviar esse dicionário para o formulário init, ele atribuirá esses valores ao objeto de instância, assim como enviá-lo request.POST.