Django Admin按用户过滤更改列表

时间:2014-08-01 07:17:04

标签: django permissions django-admin

我根据此帖子中的信息过滤了管理员中的用户:Filter django admin by logged in user 我的更改列表按预期进行过滤,只有来自“组名”组的用户才能过滤更改列表的视图,只查看其事件。问题是,当他们尝试编辑他们的事件时,他们会进行更改并获得他们的事件在管理员中成功更改的反馈,但更改不会得到保存。谁能告诉我为什么?我还希望那些没有被过滤的组中有权编辑事件的用户也可以保存更改。在我开始过滤之前,保存了更改;)

class FilterUserAdmin(admin.ModelAdmin): 
    def save_model(self, request, obj, form, change):
    if obj.user == None:
            obj.user = request.user
            obj.save()
    def queryset(self, request): 
        qs = super(FilterUserAdmin, self).queryset(request)
        if request.user.groups.filter(name__in=['Group Name',]):
            return qs.filter(user=request.user)
    else:
            return qs

    def has_change_permission(self, request, obj=None):
            if not obj:
                return True
            return obj.user == request.user

class EventAdmin(FilterUserAdmin):
     readonly_fields = ('user',)
     list_filter = ('film', 'producing_partner',)
     list_display = ('id', 'producing_partner', 'film', 'date_time', 'venue_name', 'city',)
     class Media:
         js = ('tiny_mce/tiny_mce.js', 'tiny_mce/textareas.js',)    
         css = {
                'all': ('css/admin-mods.css',)
        }

1 个答案:

答案 0 :(得分:1)

我在save_model中的条件只保存obj.user == None更改修复它。

def save_model(self, request, obj, form, change):
    if obj.user == None:
            obj.user = request.user
        obj.save()