To restrict the HOD access to his department alone, we can modify the admin page as follows :
Open the authentication/admin.py
and edit the DepartmentAdmin
Class as follows :
@admin.register(Department)
class DepartmentAdmin(admin.ModelAdmin):
list_display= ('abbr', 'name')
search_fields = ('abbr', 'name')
def get_queryset(self, request):
qs = super().get_queryset(request)
if not request.user.is_superuser:
qs=qs.filter(abbr = request.user.hodprofile.department.abbr)
return qs
Here if the user is not a super user, then filter is applied to select only the particular department.
After this is done, in the dropdown for department only the particular HOD's department will be visible.
Similarly for Workshop and Workshop Instructor also, the access can be restricted.
Open the event/admin.py
and edit the following classes :
@admin.register(Workshop)
class WorkshopAdmin(AbstractEventAdmin):
list_display = ('workshop_title', 'venue',)+AbstractEventAdmin.list_display
search_fields = AbstractEventAdmin.search_fields + ['workshop_title', 'venue']
fieldsets = (
('Basic Information', {
'fields': ('name', 'slug', 'website_link', 'mail_id', )
}),
('Workshop Details', {
'fields': ('workshop_title', 'venue', 'target_audience', 'event_type', "department", 'poster')
}),
('Dates', {
'fields': ('start_date', 'end_date', 'registration_start_date', 'registration_end_date',)
}),
)
def get_queryset(self, request):
qs = super().get_queryset(request)
if not request.user.is_superuser:
qs=qs.filter(department = request.user.hodprofile.department)
return qs
@admin.register(WorkshopInstructor)
class WorkshopInstructorAdmin(admin.ModelAdmin):
list_display = ('instructor_name', 'company_name', 'designation', 'workshop')
search_fields = ['instructor_name', 'company_name', 'designation', 'workshop__name']
list_filter = ['workshop']
def get_queryset(self, request):
qs = super().get_queryset(request)
if not request.user.is_superuser:
qs=qs.filter(workshop__department = request.user.hodprofile.department)
return qs
And also in the WorkshopInstructorAdmin, as workshop is a foreign key, it can added in autocomplete_fields for better selection.
@admin.register(WorkshopInstructor)
class WorkshopInstructorAdmin(admin.ModelAdmin):
list_display = ('instructor_name', 'company_name', 'designation', 'workshop')
search_fields = ['instructor_name', 'company_name', 'designation', 'workshop__name']
list_filter = ['workshop']
autocomplete_fields = ['workshop']
def get_queryset(self, request):
qs = super().get_queryset(request)
if not request.user.is_superuser:
qs=qs.filter(workshop__department = request.user.hodprofile.department)
return qs
Here it shows, no result found as workshops have not been added yet. In the next section we will add a workshop in CSE department.