Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django中创建自定义用户权限?_Python_Django - Fatal编程技术网

Python 如何在Django中创建自定义用户权限?

Python 如何在Django中创建自定义用户权限?,python,django,Python,Django,我的models.py中有一个布尔字段,名为“status”,管理员只能修改它,因为它是一个布尔字段。现在我希望一些用户以独占方式编辑该字段,而所有其他字段都必须是只读的。在django管理界面中,用户权限可以是完全可编辑的,也可以是只读的 我如何实现我的目标 顺便说一下,这是一个休假管理系统项目 #models.py from django.db import models from django.contrib.auth.models import User CHOICES = (('1

我的models.py中有一个布尔字段,名为“status”,管理员只能修改它,因为它是一个布尔字段。现在我希望一些用户以独占方式编辑该字段,而所有其他字段都必须是只读的。在django管理界面中,用户权限可以是完全可编辑的,也可以是只读的

我如何实现我的目标

顺便说一下,这是一个休假管理系统项目

#models.py

from django.db import models
from django.contrib.auth.models import User

CHOICES = (('1','Earned Leave'),('2','Casual Leave'),('3','Sick Leave'),('4','Paid Leave'))

class Leave(models.Model):

    name = models.CharField(max_length = 50)
    user = models.ForeignKey(User, on_delete = models.CASCADE, null =True)
    employee_ID = models.CharField(max_length = 20)
    department = models.CharField(max_length = 15)
    designation = models.CharField(max_length = 15)
    type_of_leave = models.CharField(max_length = 15, choices = CHOICES, default = None)
    from_date = models.DateField()
    to_date = models.DateField()
    reporting_manager = models.CharField(max_length = 50, default = None)
    reason = models.CharField(max_length= 180)
    accepted = models.BooleanField(('status'), default=False)


def __str__(self):
    return self.name
我是新来的django和stackoverflow。请指出我在提问时是否需要更多/更少的描述性。谢谢

更新***

views.py

from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
from .models import Leave


content_type = ContentType.objects.get_for_model(Leave)
permission = Permission.objects.create(
   codename='can_change_status',
   name='Can Change Status',
   content_type=content_type,
)

现在,在my views.py中给出代码名和名称后,我应该在哪里指定用户有权编辑的字段??权限将反映在“管理用户权限”面板中,但该功能不起作用。

首先添加权限,如下所示:

from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
from .models import Leave

content_type = ContentType.objects.get_for_model(Leave)
permission = Permission.objects.create(
   codename='can_change_status',
   name='Can Change Status',
   content_type=content_type,
)
然后,当您创建一个您希望有权限使用的用户时,如下所示:

user = User.objects.create(...)
permission = Permission.objects.get(codename='can_change_status')
user.user_permissions.add(permission)
然后检查用户是否有更改状态的权限:

return request.user.has_perm('app.can_change_status')
'''This will return `True` if the user has the 'Change Status' permission
'''

阅读更多关于

@kingraphall的信息。您能否具体说明我应该在哪些文件中添加代码。在您的视图中。你甚至可以检查用户在模板中是否有权限。我已经添加了上面的内容,应用程序的第一个块在my views.py中,权限在管理面板中得到了反映,但没有发挥作用。在哪里指定要授予权限的字段?剩下的两段代码我应该放在哪里?在你的模板中,也许在你显示请假详情的地方,只要写
if user.has_perm('perm_name'):然后显示表单字段,否则:只显示默认的
我已经尽了最大努力使用你的指示代码,在管理控制台中没有我定义的模板。因此,我不知道应该将“if”循环代码放在哪里,以便使该权限函数生效