如何在 django 中向 auth_permission 模型添加自定义字段?

问题描述

我正在使用 auth_permission 模型并在此模型中添加额外的字段。

class Permission(models.Model):

    name = models.CharField(_('name'),max_length=255)
    content_type = models.ForeignKey(
        ContentType,models.CASCADE,verbose_name=_('content type'),)
    codename = models.CharField(_('codename'),max_length=100)
    

我想添加的额外字段是

application_id = models.ForeignKey(ApplicationTbl,db_column='application_id',on_delete=models.CASCADE,blank=True,null=False)

有人可以告诉解决方法将其添加auth_permission 模型。

解决方法

在您的 models.py 中输入:

from django.contrib.auth.models import Permission

# inject application_id atribute to the Django Permission model
if not hasattr(Permission,'application_id'):
    application_id = models.ForeignKey(ApplicationTbl,db_column='application_id',on_delete=models.CASCADE,blank=True,null=False)
    application_id.contribute_to_class(Permission,'application_id')

在那之后,运行迁移,你应该准备好了。

,

执行此操作的 official standard way in Django docs 是在模型内的 Meta 类中定义它;如果它是您的用户模型,您也可以考虑使用 PermissionsMixin; 对其进行自定义; 如果您将所有内容都放在正确的位置,我相信这也适用于您的情况。 您没有提供有关您的系统以及您要执行的操作的太多详细信息,但我猜您是在尝试弄清楚用户在哪个应用程序上下文中执行其活动。在这种情况下,如果您的系统规模相当大,您还可以尝试将用户身份验证后端视为 Django 项目中的单独应用程序文件夹。希望我能帮上忙。