我希望管理员用户只看到他们创建的模型实例。我遵循了这些指示Filter django admin by logged in user
class FilterUserAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
if getattr(obj, 'user', None) is None: #Assign user only the first time, superusers can edit without changing user
obj.user = request.user
obj.save()
def queryset(self, request):
qs = super(FilterUserAdmin, self).queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(user=request.user)
def has_change_permission(self, request, obj=None):
if not obj:
# the changelist itself
print('query change')
return True # So they can see the change list page
return obj.user == request.user or request.user.is_superuser
class CampaignAdmin(FilterUserAdmin):
...
这就是我的代码的样子。一切正常。我需要另一个模型与运动作为外键。在
^{pr2}$现在当我进入屏幕时,我看到其他用户创建的活动可供选择
我不希望其他用户的活动能够被选中
更新:这是我当前的get_表单
class ScreenAdmin(FilterUserAdmin):
list_display = ('screen_name', 'id','screen_URL')
def get_form(self, request, obj=None, **kwargs):
self.exclude = ["beacon"]
if not request.user.is_superuser:
self.exclude.append('user') #here!
form = super(ScreenAdmin, self).get_form(request, obj, **kwargs)
#print(vars(form))
form.base_fields['campaign'].queryset = Campaign.objects.filter(user=request.user)
return form
def changelist_view(self, request, extra_context=None):
if request.user.is_superuser:
self.list_display = ('screen_name','user', 'id','screen_URL')
#print('Change List######')
return super(ScreenAdmin, self).changelist_view(request, extra_context)
这个解决方案是非常明智和有效的
除非你被标记为超级用户,否则这可能就是你要做的。在
要访问管理界面,您必须将用户勾选为“staff”(是\u staff)
如果你勾选“超级用户”,你会看到所有的数据,所以创建其他用户(用于测试)给他添加适当的权限,但不要将mim标记为超级用户,只不过是用户的工作人员和测试人员。在
相关问题 更多 >
编程相关推荐