Sto scrivendo un mixin che consentirà ai miei modelli di essere facilmente tradotti in un profondo valore di valori (un po 'come .values (), ma attraversando le relazioni). Il posto più pulito di fare le definizioni di questi sembra essere nei modelli stessi, a la:Aggiunta di attributi nella classe Meta di Django Model
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'
}
}
Tuttavia, Django lamenta il mio compreso questo in class Meta
con:
TypeError: 'class Meta' got invalid attribute(s): schema
(intero stack trace here)
Ora, suppongo di poterlo sovrascrivere nel mio mixin, ma esiste un modo più elegante di archiviare queste informazioni?
Per i posteri, questo non funziona, ma questo ha fatto: options.DEFAULT_NAMES = options.DEFAULT_NAMES + ('default_values',) –
Oh ... è presumibilmente perché la mia soluzione converte DEFAULT_NAMES in una lista, mentre il tuo raffinamento lo mantiene come una tupla. –
Molto probabilmente! :) –