Ich versuche, allen meinen Django-Modellen mithilfe der Modellvererbung ein dynamisches Meta-Attribut hinzuzufügen, aber ich kann es nicht zum Laufen bringen. Ich habe eine Erlaubnis, die ich so an alle meine Modelle hinzufügen möchten:Dynamische Meta-Attribute für Django-Modelle?
class ModelA(models.Model):
class Meta:
permisssions =(('view_modela','Can view Model A'),)
class ModelB(models.Model):
class Meta:
permisssions =(('view_modelb','Can view Model B'),)
Ich habe versucht, eine abstrakte Basisklasse wie folgt zu erstellen:
class CustomModel(models.Model):
def __init__(self, *args, **kwargs):
self._meta.permissions.append(('view_'+self._meta.module_name, u'Can view %s' % self._meta.verbose_name))
super(CustomModel,self).__init__(*args, **kwargs)
class ModelA(CustomModel):
....
class ModelB(CustomModel):
...
aber es funktioniert nicht. Ist das der richtige Ansatz? Da Django die Modellklassen mit Introspektion erstellt, bin ich mir nicht sicher, ob das Hinzufügen von Berechtigungen während der Klasse __init__()
überhaupt möglich ist. Mit meiner aktuellen Implementierung hängt jedes Mal, wenn ich auf eine Modellinstanz zugreife, ein weiteres Tupel der Berechtigungen an.
+1 für ein Beispiel einer benutzerdefinierten metaclass in einer django bezogene Frage des Schreibens. Dieses Zeug ist schwer zu finden! –
Ich weiß, das ist was upvotes sind, und das ist ein alter Thread, aber ... verdammt, Jarret. Der enzyklopädische Kenntnisstand von Django und Python musste mit dieser Antwort aufkommen und dann einfach und klar erklären, dass sie irrsinnig ist. Danke, dass Sie das Internet zu einem nützlicheren Ort gemacht haben. – jfmatt
Ich weiß nicht, wer du bist, @General_Mayhem, aber du hast gerade mein Jahr gemacht. Danke, dass du nette Kommentare zu solch einem alten Beitrag geschrieben hast! –