2010-03-01 8 views
27

Se intentó extender el código y me he encontrado con un problema. No entiendo una línea de código. Sé el resultado, pero no entiendo cómo sucede y estoy lo suficientemente asustado como para cambiarlo.Explicación de contribute_to_class

La línea de código que he encontrado es la siguiente:

MyGenericRelation().contribute_to_class(model, 'field_name') 

El resultado de este código es un campo con 'nombre_campo' se añade a la 'modelo' y de lo que se reúnen los objetos en el interior el campo es una lista de tipo X (parte de MyGenericRelation).

Me pregunto si alguien puede explicar cómo funciona esto.

Al igual que en, ¿por qué obtengo una lista de objetos X adjuntos a 'nombre_campo' y si tiene que ser relaciones genéricas antes de contribuir_a_clase o usaría un tipo de modelo real, diga 'S' simplemente déme una lista de Y's

Para ser sincero, estoy más interesado en el efecto y la funcionalidad del método contribute_to_class.

+1

¿Puede explicar lo que está tratando de hacer y por qué cree que necesita modificar este código? ¿Qué no puedes lograr con relaciones genéricas normales? –

Respuesta

37

Básicamente, para los objetos que tienen un método contribute_to_class, cuando los añade a una clase de modelo, lo llamamos contribute_to_class en lugar de setattr: esto permite que los objetos que se pueden hacer teneduría de libros y/o modificación adicional de la clase a medida que se añaden. Alex Gaynor tiene una buena explicación aquí: http://lazypython.blogspot.com/2008/11/django-models-digging-little-deeper.html