【问题标题】:Removing permissions with the old model name in DJANGO在 DJANGO 中使用旧模型名称删除权限
【发布时间】:2020-01-01 08:33:54
【问题描述】:

我更改了模型的名称。它被称为“Riesgo asociado”,我将其更改为“Reglas”,然后更改为“Regla”并应用迁移,一切正常。但是现在我对每个名称都有更改、删除、查看和添加权限,即使它们是同一个模型。

我需要更改此设置,因为所有这些权限都显示在自定义管理视图中,而旧名称的这些权限是无用的。

为了更清楚,see the following image that shows the permissions on the admin page 是相同的 app_name,相同的型号,不同的权限名称。

这个之前被命名为“Riesgo asociado”和“Reglas”的模型“Regla”:

class Regla(AuditMixin, models.Model):
   rule_id = models.IntegerField(
       verbose_name='Rule ID'
   )
   descripcion = models.TextField(
       verbose_name='Descripcion'
   )
   servicio = models.ForeignKey(
       'Servicio',
       on_delete=models.PROTECT,
       verbose_name='Servicio'
   )
   exclusivo = models.BooleanField(
       verbose_name='Exclusivo'
   )
   def __str__(self):
       return str(self.rule_id)
   def get_descripcion(self):
       return str(self.descripcion)
   def get_servicio(self):
       return str(self.servicio)

【问题讨论】:

  • 你能分享你的模型吗?
  • @NalinDobhal 我用模型类更新了问题
  • 从未尝试过,但您不能删除过时的 Permissions 对象吗? docs.djangoproject.com/en/2.2/ref/contrib/auth/…(注意我没有检查关系所以确保它不会导致删除级联)。
  • @nigel222 那么,获取权限对象并对其应用 permission.delete() 吗?我什至没有考虑它,也许它有效......

标签: django django-models permissions


【解决方案1】:

根据 nigel222 的评论,我尝试选择每个权限对象并对其执行 permission.delete() ,它可以工作!不知道您可以将 delete() 应用于 perms。

我将此添加到加载权限的视图中:

perms_to_delete= Permission.objects.filter(content_type=ContentType.objects.get_for_model(MyModel))
    for perm in perms_to_delete:
        if "OldModelName" in str(perm):
            perm.delete()

感谢nigel222的想法!

【讨论】:

    猜你喜欢
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    • 2015-11-06
    • 1970-01-01
    • 2019-09-15
    • 2020-01-19
    相关资源
    最近更新 更多