Hinzufügen von Attributen in die Meta-Klasse des Django-Modells

Ich schreibe ein Mixin, das es meinen Models erlaubt, leicht in ein tiefes Diktat von Werten übersetzt zu werden (Art von like .values ​​(), aber durchqueren von Beziehungen). Der sauberste Ort, um die Definitionen dieser zu machen, scheint in den Modellen selbst zu sein, a la:

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' } } 

Allerdings klagt Django über meine einschließlich dieses in class Meta mit:

 TypeError: 'class Meta' got invalid attribute(s): schema 

(Ganze Stapelspur hier )

Nun, ich nehme an, ich könnte das in meinem Mixin aufwändig überschreiben, aber gibt es eine elegantere Art, diese Informationen zu speichern?

One Solution collect form web for “Hinzufügen von Attributen in die Meta-Klasse des Django-Modells”

Ich weiß nicht über elegant, aber ein pragmatischer Weg ist:

 import django.db.models.options as options options.DEFAULT_NAMES = options.DEFAULT_NAMES + ('schema',) 

Offensichtlich würde dies brechen, wenn Django jemals ein "Schema" Attribut seiner eigenen hinzugefügt. Aber hey, es ist ein Gedanke … Sie könnten immer einen Attributnamen auswählen, der weniger wahrscheinlich ist, zu kollidieren.

  • Wie bekomme ich die Ausrichtung von Videodateien in Python
  • Wie unterscheidet sich HDF5 von einem Ordner mit Dateien?
  • Finden Sie eine Liste aller Doppel-Unterstrich-Variablen?
  • Extrahierdauer der Videodatei ohne externen Prozess in Python
  • Python ist die beste Programmiersprache der Welt.