Django objeto get / campo definido

votos
26

Posso obter o valor de um campo de objeto de alguma outra maneira do que obj.field. Será algo como obj.get ( 'campo') existe? Mesma coisa para definir o valor do campo.

Publicado 18/04/2009 em 15:55
fonte usuário
Em outras línguas...                            


4 respostas

votos
66

Para obter o valor de um campo:

getattr(obj, 'field_name')

Para definir o valor de um campo:

setattr(obj, 'field_name', 'field value')

Para obter todos os campos e valores para um objeto Django:

[(field.name, getattr(obj,field.name)) for field in obj._meta.fields]

Você pode ler a documentação do Modelo _meta API que é realmente útil.

Respondeu 19/06/2009 em 21:24
fonte usuário

votos
6

por que voce quer isso?

Você poderia usar

obj.__dict__['field']

eu acho ... que ele não é uma chamada de método

changed=[field for (field,value) in newObj.__dict__ if oldObj.__dict__[field] != value]

vai lhe dar uma lista de todos os campos que onde alterados.

(Embora eu não estou 100% de certeza)

Respondeu 18/04/2009 em 16:10
fonte usuário

votos
3

Se alguém se depara com esta pequena pergunta, a resposta está aqui: Como introspecção campos do modelo Django?

Respondeu 08/11/2010 em 16:24
fonte usuário

votos
2

Para obter campos relacionados:

def getattr_related(obj, fields):
    a = getattr(obj, fields.pop(0))
    if not len(fields): return a
    else:               return getattr_related(a, fields)

Por exemplo,

getattr_related(a, "some__field".split("__"))

Não sei, talvez haja uma maneira melhor de fazer isso, mas que funcionou para mim.

Respondeu 18/06/2011 em 20:57
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more