【发布时间】:2021-08-23 17:51:10
【问题描述】:
我有一个函数make_fields_permissions,我需要在模型类中使用它来解析字段并为每个字段设置权限,例如[('can_view_first_name_field','can view first name'),...]
-
目标我需要调用并覆盖
Person类并在其中自我 - 我试过了
def __init__(self,*args, **kwargs):
self.Meta.permissions = make_fields_permissions(self.model)
super().__init__(*args, **kwargs)
- 我的代码如下所示
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
def __init__(self, *args, **kwargs):
# kwargs['user']['permissions'] = make_fields_permissions(Profile)
# x = self['age']
super().__init__(*args, **kwargs)
class Meta:
permissions = make_fields_permissions(Person) #< I can't use the same model inside meta
【问题讨论】:
-
您可以将逻辑引入到 create
Permission对象:docs.djangoproject.com/en/3.2/ref/contrib/auth/… 所以不要在Meta中使用这些,而是创建一个检查字段的函数给定模型,并构造Permission对象。 -
你的意思是在课外我不得不说
Person.permissions = myFunction(Person)? -
或者你可以决定涉足元类(可以自定义类的创建方式)并尝试从
ModelBase继承。虽然这很容易破解,因为ModelBase(这是Model使用的元类)已经做了很多事情,所以这种修改需要非常小心,它会更容易让您在应用程序配置ready方法中执行此操作,并尝试通过遍历模型字段来获得权限。 -
@alial-karaawi:不,只是
myFunction(Person),然后你就创建权限了。例如,您可以在应用程序配置的ready方法中触发此操作,就像 Abdul 说的那样。 -
@AbdulAzizBarkat 你能把它写在答案中吗?我不明白这样吗?
标签: python python-3.x django python-2.7