我有以下模型:
项目:
class Project(models.Model):
project_name = models.CharField(max_length=100, unique=True)
搜索架:
class SearchCode(models.Model):
project = models.ForeignKey(Project, on_delete=models.CASCADE)
search_code = models.CharField(max_length=3)
search_code_modifier = models.CharField(max_length=1)
class Meta:
unique_together = ('project', 'search_code', 'search_code_modifier',)
从Django-Guardian文档中,我可以在Django管理员中设置权限。然后,对于一个项目,我可以在这样的视图中检查/限制用户:
def project_edit(request, pk_project):
project = get_object_or_404(Project, pk=pk_project)
project_name = project.project_name
user = request.user
# Check user permission at the object level by passing in this specific project
if user.has_perm('myApp.change_project', project):
...do something
现在这是我被困的地方。如何在与Django-Admin中的项目相关的任何搜索架上设置权限?我不想在搜索架上设置对象级权限 - 这只是搜索码的每个实例。相反,我需要能够在管理员中设置:
您可以查看与此项目相关的每个搜索码,而不是任何其他搜索码。
请让我知道我是否需要更具体 - 我试图使其尽可能通用。
谢谢 - 任何帮助或指示都将不胜感激。
编辑:
我使用管理综合示例来设置django-guardian中的项目对象级权限。
在这一点上,当我在该项目的"对象 - 通用"页面时,必须有某种方法来设置与项目的所有搜索码的权限。
django-guardian是对象级别许可申请,因此请在携带权限的对象上分配权限并在该对象上检查该对象以获取许可。在您的特定示例中,您必须编写类似的内容才能通过项目(权限携带对象)检查代码的权限:
def code_edit(request, pk):
code = get_object_or_404(SearchCode.objects.select_related('project'), pk=pk)
project = code.project
project_name = project.project_name
user = request.user
# Check user permission at the object level by passing in this specific project
if user.has_perm('myApp.change_project', project):
...do something