it-swarm-pt.tech

O objeto não suporta erro de atribuição de item

No meu views.py atribuo valores antes de salvar o formulário. Eu costumava fazer da seguinte maneira:

projectForm.lat = session_results['lat']
projectForm.lng = session_results['lng']

Agora, como a lista de variáveis ​​ficou um pouco longa, eu queria fazer um loop sobre session_results com o seguinte loop (conforme descrito por Adam aqui ):

for k,v in session_results.iteritems():
    projectForm[k] = v

Mas eu recebo o erro 'Project' object does not support item assignment para a solução de loop. Eu tenho problemas para entender o porquê. Project é a classe de modelo, que eu uso para o ModelForm.

Obrigado pela ajuda!

44
neurix

O erro parece claro: os objetos de modelo não suportam a atribuição de itens. MyModel.objects.latest('id')['foo'] = 'bar' lançará este mesmo erro.

É um pouco confuso que sua instância de modelo seja chamada projectForm...

Para reproduzir seu primeiro bloco de código em um loop, você precisa usar setattr

for k,v in session_results.iteritems():
    setattr(projectForm, k, v)
63
Yuji 'Tomita' Tomita

Outra maneira seria adicionar a função _ GETITEM _, _ SETITEM _

def __getitem__(self, key):
    return getattr(self, key)

Você pode usar a [chave] própria para acessar agora.

19
Ivan Wang