fromdjango.contribimportadminfromdjango.templateimportContext,Templatefromdjango.utils.safestringimportmark_safefrom...utils.admin_helpersimportexport_csv_actionfrom.modelsimportCarApplication,ParkingApplication"""Give parking group admin privileges:group = Group.objects.get(name="admin_parking")perms = Permission.objects.filter(Q(codename__endswith="carapplication")|Q(codename__endswith="parkingapplication"))group.permissions.add(*perms)group.save()staff_group = Group.objects.get(name="admin_staff")for u in group.user_set.all(): # allow access to admin u.groups.add(staff_group) u.save()"""
[docs]classParkingAdmin(admin.ModelAdmin):defget_user(self,obj):u=obj.userreturnmark_safe(f"{u.first_name}{u.last_name} ({u.grade.number})<br>{u.absence_count()} absences")get_user.short_description="User"# type: ignoredefget_joint_user(self,obj):u=obj.joint_userifu:returnmark_safe(f"{u.first_name}{u.last_name} ({u.grade.number})<br>{u.absence_count()} absences")return"n/a"get_joint_user.short_description="Joint User"# type: ignoredefget_absences(self,obj):absences=obj.user.absence_count()or0ifobj.joint_user:absences+=obj.joint_user.absence_count()or0returnabsencesget_absences.short_description="Absences"# type: ignoredefget_cars(self,obj):template=Template("{% for car in cars %}{{ car }}{% if not forloop.last %}<br>{% endif %}{% endfor %}")returntemplate.render(Context({"cars":obj.cars.all()}))get_cars.short_description="Cars"# type: ignorelist_display=("get_user","get_joint_user","get_absences","mentorship","email","get_cars")list_filter=("added","updated")ordering=("-added",)raw_id_fields=("user","joint_user")filter_horizontal=("cars",)actions=[export_csv_action()]