Estoy escribiendo un mixin que permitirá que mis modelos se traduzcan fácilmente a un dict profundo de valores (algo así como .values (), pero atravesando relaciones). El lugar más limpio que ver las definiciones de estos parece estar en los propios modelos, al estilo de:Agregando atributos a la clase meta del modelo Django
class Person(models.Model, DeepValues):
name = models.CharField(blank=True, max_length=100)
tribe = models.ForeignKey('Tribes')
class Meta:
schema = {
'name' : str,
'tribe' : {
'name' : str
}
}
Person.objects.all().deep_values() => {
'name' : 'Andrey Fedorov',
'tribe' : {
'name' : 'Mohicans'
}
}
Sin embargo, Django se queja de mi inclusión dentro de class Meta
con:
TypeError: 'class Meta' got invalid attribute(s): schema
(toda traza de la pila here)
Ahora, supongo que podría anular cuidadosamente esto en mi mixin, pero ¿hay alguna forma más elegante de almacenar esta información?
Por la posteridad, eso no funciona, pero esto fue así: options.DEFAULT_NAMES = options.DEFAULT_NAMES + ('default_values',) –
Oh ... es presumible porque mi solución convierte DEFAULT_NAMES a una lista, mientras que su refinamiento lo mantiene como una tupla. –
¡Lo más probable! :) –