我有以下模型:
项目:
class Project(models.Model):
project_name = models.CharField(max_length=100, unique=True)SearchCodes:
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 docs中,我可以在Django admin中设置权限。然后,对于项目,我可以在视图中检查/限制用户,如下所示:
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中设置与项目相关的任何SearchCodes的权限?我不想在SearchCodes上设置对象级权限-那只是SearchCode的每个实例。相反,我需要能够在Admin中设置:
您可以查看与此项目相关的每个SearchCode,但不能查看任何其他SearchCodes。
如果我需要更具体的内容,请告诉我--我已经尽量保持通用性。
谢谢--任何帮助或指点都将非常感谢。
编辑:
我使用Admin-Integration示例在Django-Guardian中设置了项目对象级别的权限。
感觉在这一点上,当我在这个项目的对象权限页面中时,必须有某种方法来设置与这个项目的特定实例相关的所有SearchCodes的权限。
发布于 2017-02-21 08:35:23
Django-guardian是对象级权限应用程序,所以在携带权限的对象上分配权限,并检查该对象的权限。在您的特定示例中,您必须编写类似这样的代码,以通过project (权限载体对象)检查代码的权限:
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 somethinghttps://stackoverflow.com/questions/42351312
复制相似问题