More sophisticated admin site for the gestion app
- Nested inlines - Limiting access to the events : you can only edit/create events linked to associations you for which you have the `<assoc>.buro` permission.
This commit is contained in:
parent
a9e6ef6c5c
commit
7967983b5c
4 changed files with 46 additions and 17 deletions
|
@ -43,6 +43,7 @@ INSTALLED_APPS = (
|
|||
'channels',
|
||||
'widget_tweaks',
|
||||
'custommail',
|
||||
'nested_admin',
|
||||
'bda.apps.BdAConfig',
|
||||
'bds.apps.BDSConfig',
|
||||
'cof.apps.COFConfig',
|
||||
|
|
|
@ -81,6 +81,7 @@ urlpatterns = [
|
|||
cof_views.liste_bdarevente,
|
||||
name="liste_bdarevente"),
|
||||
url(r'^k-fet/', include(kfet.urls)),
|
||||
url(r"^_nested_admin/", include("nested_admin.urls")),
|
||||
]
|
||||
|
||||
if 'debug_toolbar' in settings.INSTALLED_APPS:
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
import nested_admin
|
||||
|
||||
from django.contrib import admin
|
||||
from django.contrib.auth.admin import UserAdmin
|
||||
from django.contrib.auth.models import User
|
||||
from django.forms.models import modelform_factory
|
||||
|
||||
from .models import (
|
||||
Profile, Club, Event,
|
||||
Association, Profile, Club, Event, Location,
|
||||
EventOption, EventCommentField, EventOptionChoice
|
||||
)
|
||||
|
||||
|
@ -30,40 +33,63 @@ admin.site.register(User, UserProfileAdmin)
|
|||
# Clubs
|
||||
# ---
|
||||
|
||||
@admin.register(Club)
|
||||
class ClubAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
admin.site.register(Club)
|
||||
|
||||
|
||||
# ---
|
||||
# Events
|
||||
# ---
|
||||
|
||||
class EventOptionChoiceInline(admin.TabularInline):
|
||||
class EventOptionChoiceInline(nested_admin.NestedTabularInline):
|
||||
model = EventOptionChoice
|
||||
extra = 1
|
||||
|
||||
|
||||
class EventOptionInline(admin.TabularInline):
|
||||
class EventOptionInline(nested_admin.NestedTabularInline):
|
||||
model = EventOption
|
||||
show_change_link = True
|
||||
extra = 1
|
||||
inlines = [EventOptionChoiceInline]
|
||||
|
||||
|
||||
class EventCommentFieldInline(admin.TabularInline):
|
||||
class EventCommentFieldInline(nested_admin.NestedTabularInline):
|
||||
model = EventCommentField
|
||||
|
||||
|
||||
@admin.register(EventOption)
|
||||
class EventOptionAdmin(admin.ModelAdmin):
|
||||
search_fields = ('event__title', 'name')
|
||||
inlines = [
|
||||
EventOptionChoiceInline,
|
||||
]
|
||||
extra = 1
|
||||
|
||||
|
||||
@admin.register(Event)
|
||||
class EventAdmin(admin.ModelAdmin):
|
||||
class EventAdmin(nested_admin.NestedModelAdmin):
|
||||
search_fields = ['title', 'location', 'description']
|
||||
inlines = [
|
||||
EventOptionInline,
|
||||
EventCommentFieldInline,
|
||||
]
|
||||
|
||||
def get_queryset(self, request):
|
||||
"""Restrict the event you can edit"""
|
||||
qs = super().get_queryset(request)
|
||||
if request.user.is_superuser:
|
||||
return qs
|
||||
else:
|
||||
assocs = Association.objects.filter(staff_group__user=request.user)
|
||||
return qs.filter(associations__in=assocs)
|
||||
|
||||
def get_form(self, request, obj=None, **kwargs):
|
||||
"""Restrict the applications you can attach to an event"""
|
||||
if request.user.is_superuser:
|
||||
return super().get_form(request, obj, **kwargs)
|
||||
else:
|
||||
assocs = Association.objects.filter(staff_group__user=request.user)
|
||||
|
||||
def formfield_callback(f, **kwargs):
|
||||
if f.name == "associations":
|
||||
kwargs["queryset"] = assocs
|
||||
return f.formfield(**kwargs)
|
||||
|
||||
return modelform_factory(
|
||||
Event,
|
||||
exclude=[],
|
||||
formfield_callback=formfield_callback
|
||||
)
|
||||
|
||||
|
||||
admin.site.register(Location)
|
||||
|
|
|
@ -19,3 +19,4 @@ django-widget-tweaks==1.4.1
|
|||
git+https://git.eleves.ens.fr/cof-geek/django_custommail.git#egg=django_custommail
|
||||
ldap3
|
||||
git+https://github.com/Aureplop/channels.git#egg=channels
|
||||
django-nested-admin=3.0.17
|
||||
|
|
Loading…
Reference in a new issue