Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

178
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!