Wendy
Wendy

Reputation: 111

Django Admin filter changelist by user

I'm filtering users in the admin, based on the info from this post: Filter django admin by logged in user My changelist is filtered as expected, only users from group "Group Name" have filtered views of the changelist, seeing only their events. The problem is when they try to edit their events, they make a change and get the feedback that their event was changed successfully in the admin, but the changes don't get saved. Can anyone tell me why? I would also like users that aren't in the group that's being filtered that have permission to edit events to be able to save changes as well. Changes were being saved before I started filtering ;)

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',)
        }

Upvotes: 0

Views: 962

Answers (1)

Wendy
Wendy

Reputation: 111

My conditional in save_model only saved if obj.user == None Changing that fixed it.

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

Upvotes: 1

Related Questions