Estoy tratando de agregar un atributo Meta dinámico a todos mis modelos de Django usando la herencia del modelo, pero no puedo hacer que funcione. Tengo un permiso que quiero añadir a todos mis modelos como este:Atributos de Meta dinámico para modelos de Django?
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'),)
He intentado crear una clase base abstracta como esto:
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):
...
pero no funciona. ¿Es este el enfoque correcto? Debido a que Django utiliza la introspección para construir las clases de modelo, no estoy seguro de si agregar permisos durante el __init__()
de la clase incluso funcionará. Con mi implementación actual cada vez que accedo a una instancia de modelo, agrega otra tupla de permisos.
+1 para un ejemplo de escritura de una metaclase costumbre en una pregunta relacionada con Django. esto es difícil de encontrar –
Sé que esto es para lo que son los votos expresos, y este es un hilo viejo, pero ... maldición, Jarret. El nivel enciclopédico de conocimiento de Django y Python necesitaba dar con esta respuesta y luego explicar de manera simple y clara es alucinante. Gracias por hacer de Internet un lugar más útil. – jfmatt
No sé quién es usted, @General_Mayhem, pero acaba de hacer mi año. ¡Gracias por hacer buenos comentarios en una publicación tan antigua! –