improving proposals admin
This commit is contained in:
parent
21b53f3091
commit
0ae9b5cb4b
|
@ -1,34 +1,51 @@
|
|||
from django.contrib import admin
|
||||
from django.contrib.sites.shortcuts import get_current_site
|
||||
|
||||
from proposals.models import Conference, Talk, Topic, Track, Event
|
||||
from planning.models import Room
|
||||
|
||||
|
||||
class TalkAdmin(admin.ModelAdmin):
|
||||
# Disable add button in django admin has it is too dangerous
|
||||
# (it is easy to obtain incoherent data due to site framework)
|
||||
def has_add_permission(self, request):
|
||||
return False
|
||||
# Filter for 'on site' topics, tracks and events
|
||||
class SiteAdminMixin:
|
||||
exclude = ('site',)
|
||||
|
||||
def get_queryset(self, request):
|
||||
return super().get_queryset(request).filter(site=get_current_site(request))
|
||||
|
||||
def save_model(self, request, obj, form, change):
|
||||
if not change:
|
||||
obj.site = get_current_site(request)
|
||||
super().save_model(request, obj, form, change)
|
||||
|
||||
|
||||
class TalkAdmin(SiteAdminMixin, admin.ModelAdmin):
|
||||
def get_form(self, request, obj=None, **kwargs):
|
||||
form = super(TalkAdmin, self).get_form(request, obj, **kwargs)
|
||||
# in fact, obj should never be none as 'add' button is disabled
|
||||
if obj:
|
||||
form.base_fields['topics'].queryset = Topic.objects.filter(site=obj.site)
|
||||
form.base_fields['track'].queryset = Track.objects.filter(site=obj.site)
|
||||
form.base_fields['event'].queryset = Event.objects.filter(site=obj.site)
|
||||
site = get_current_site(request)
|
||||
form.base_fields['topics'].queryset = Topic.objects.filter(site=site)
|
||||
form.base_fields['track'].queryset = Track.objects.filter(site=site)
|
||||
form.base_fields['event'].queryset = Event.objects.filter(site=site)
|
||||
form.base_fields['room'].queryset = Room.objects.filter(site=site)
|
||||
return form
|
||||
|
||||
|
||||
class TopicAdmin(admin.ModelAdmin):
|
||||
# Filter for 'on site' tracks
|
||||
class TopicAdmin(SiteAdminMixin, admin.ModelAdmin):
|
||||
def get_form(self, request, obj=None, **kwargs):
|
||||
form = super().get_form(request, obj, **kwargs)
|
||||
if obj:
|
||||
form.base_fields['track'].queryset = Track.objects.filter(site=obj.site)
|
||||
site = get_current_site(request)
|
||||
form.base_fields['track'].queryset = Track.objects.filter(site=site)
|
||||
return form
|
||||
|
||||
|
||||
class TrackAdmin(SiteAdminMixin, admin.ModelAdmin):
|
||||
pass
|
||||
|
||||
|
||||
class EventAdmin(SiteAdminMixin, admin.ModelAdmin):
|
||||
pass
|
||||
|
||||
|
||||
admin.site.register(Conference)
|
||||
admin.site.register(Topic, TopicAdmin)
|
||||
admin.site.register(Track)
|
||||
admin.site.register(Track, TrackAdmin)
|
||||
admin.site.register(Talk, TalkAdmin)
|
||||
admin.site.register(Event)
|
||||
admin.site.register(Event, EventAdmin)
|
||||
|
|
Loading…
Reference in New Issue