在我的Django项目中,我有模型Project、Person、Task和Info。
然而,问题是,项目是父模型。人员、任务、信息属于项目。
如果我添加人员、任务或信息,我必须选择它所属的项目(ForeignKey)。
我的问题是:这些项目是独立的,我有不同的项目经理。我的目标是在管理界面中,例如项目A的项目经理只能向他的项目添加一个人,与Info和Task相同。
我不希望项目A的项目经理可以看到/编辑/添加/删除项目B的内容。不幸的是,我在Django管理员中找不到符合我要求的选项。
如果项目经理登录,他应该只看到属于他的项目的实例,其他什么也看不到。
你将如何解决这个问题?
发布于 2017-08-21 17:00:38
根据我的理解,我认为你的模型结构是这样的:
class Project(models.Model):
manager = models.ForeignKey(User)
...
class Person(models.Model):
project = models.ForeignKey(Project)
...在admin.py中,您可以执行各种修改来实现您的目标
class PersonAdmin(admin.ModelAdmin):
# other code
# this function will list persons
# only whose project has current user as project manager
def get_queryset(self, request):
qs = super(PersonAdmin, self).get_queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(project__manager__user=request.user)
# this function will list the projects in dropdowns
# who has current user as project manager
def render_change_form(self, request, context, *args, **kwargs):
if not request.user.is_superuser:
context['adminform'].form.fields['project'].queryset = Project.objects.filter(manager__user=request.user)
return super(PersonAdmin, self).render_change_form(request, context, args, kwargs)
# this function is used for edit permission
def has_change_permission(self, request, obj=None):
if not obj:
return True
return obj.project.manager.user == request.user or request.user.is_superuser
# this function is used for delete permission
def has_delete_permssion(self, request, obj=None):
if not obj:
return True
return obj.project.manager.user == request.user or request.user.is_superuser类似的方法也可用于管理中的其他模型
https://stackoverflow.com/questions/45792144
复制相似问题