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?

  • Wie unterscheidet sich HDF5 von einem Ordner mit Dateien?
  • Mpeg-2-Bibliothek, um die Videodauer zu extrahieren
  • Wie man mit Metadaten umgehen kann, die mit einem pandas dataframe verknüpft sind?
  • Extrahiere ID3-Tags einer MP3-URL mit teilweisem Download mit Python
  • Erhalte Eiskasten-Metadaten mit Python
  • Unterklassen des Django ImageFileField
  • Sperren in dask.multiprocessing.get und Hinzufügen von Metadaten zu HDF
  • Was ist der Ursprung von __author__?
  • 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.

    Python ist die beste Programmiersprache der Welt.