Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

177
Vistas
Cree un permiso personalizado dinámicamente para el nombre de campo específico de un modelo en Django

He creado un modelo y quiero crear algunos grupos y permisos dinámicamente con un nombre de campo específico del modelo y el nombre del grupo o el nombre del código de permiso.

Por ejemplo, si tengo un modelo de Instituto con algunos campos (por ejemplo, eiin , nombre , dirección , categoría ), quiero un permiso personalizado dinámico llamado nombre_puede_editar_dirección para el campo de nombre . Lo cual funciona bien (como _can_edit_address ) con la clase Meta, pero no puedo agregar el nombre de campo del modelo como sufijo del permiso (como name_can_edit_address ) como nombre de código.

¿Es posible hacer eso? Obtiene NameError: el nombre 'self' no está definido.

 # model specifications class Institute(models.Model): CATEGORY=( ('play', 'play'), ('High school', 'High school'), ('College', 'College'), ) eiin = models.CharField(max_length=50, blank=True, null= True) name = models.CharField(max_length=100) address = models.ForeignKey(Address, on_delete=SET_NULL, blank=True, null=True) category = models.CharField(max_length=100, choices=CATEGORY) # dynamic group creation ok # create group dynamically with the model objects def save(self, *args, **kwargs): super(Institute, self).save(*args, **kwargs) Group.objects.create(name=str(self.name)+"_students") Group.objects.create(name=str(self.name)+"_teachers") Group.objects.create(name=str(self.name)+"_controller") Group.objects.create(name=str(self.name)+"_employees") Group.objects.create(name=str(self.name)+"_guardians") # problem is here. It's not taking name field as suffix of code name for permissions # create permissions dynamically with institution name & permission code like (field_permissioncode) class Meta: permissions = ( (str(self.name)+'_can_edit_address', 'can edit address of institute'), (str(self.name)+'_can_add_eiin', 'can add eiin of institute') )
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Los permisos de Django son objetos , luego tienen una clase dedicada: Permission . Pero en Django, los permisos están vinculados a ContentType . Si desea crear algún permiso sobre la marcha, debe crear el tipo de contenido y después del permiso como este:

 from django.contrib.contenttypes.models import ContentType from django.contrib.auth.models import Permission def save(self, *args, **kwargs): super(Institute, self).save(*args, **kwargs) Group.objects.create(name=str(self.name)+"_students") # ... # Create contenttype and permissions, replace app_label and model to fit your needs content_type = ContentType.objects.get(app_label='app_name', model='Institute') permission = Permission.objects.create(codename=str(self.name)+'_can_edit_address', name='can edit address of institute', content_type=content_type) permission = Permission.objects.create(codename=str(self.name)+'_can_add_eiin', name='can edit eiin of institute', content_type=content_type)

Puedes encontrar más explicaciones en este post .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda