django admin: show only on site votes

This commit is contained in:
Élie Bouttier 2017-08-12 19:25:56 +02:00
parent b332b72065
commit fca9a1eb1a
3 changed files with 24 additions and 20 deletions

View File

@ -1,11 +1,11 @@
from django.contrib import admin from django.contrib import admin
from django.contrib.sites.models import Site from django.contrib.sites.models import Site
from ponyconf.admin import SiteAdminMixin from .mixins import OnSiteAdminMixin
from .models import Conference, Participant, Talk, TalkCategory, Track, Vote from .models import Conference, Participant, Talk, TalkCategory, Track, Vote
class ConferenceAdmin(SiteAdminMixin, admin.ModelAdmin): class ConferenceAdmin(OnSiteAdminMixin, admin.ModelAdmin):
filter_horizontal = ('staff',) filter_horizontal = ('staff',)
def has_add_permission(self, request): def has_add_permission(self, request):
@ -15,19 +15,19 @@ class ConferenceAdmin(SiteAdminMixin, admin.ModelAdmin):
return False return False
class ParticipantAdmin(SiteAdminMixin, admin.ModelAdmin): class ParticipantAdmin(OnSiteAdminMixin, admin.ModelAdmin):
pass pass
class TrackAdmin(SiteAdminMixin, admin.ModelAdmin): class TrackAdmin(OnSiteAdminMixin, admin.ModelAdmin):
pass pass
class TalkCategoryAdmin(SiteAdminMixin, admin.ModelAdmin): class TalkCategoryAdmin(OnSiteAdminMixin, admin.ModelAdmin):
pass pass
class TalkAdmin(SiteAdminMixin, admin.ModelAdmin): class TalkAdmin(OnSiteAdminMixin, admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs): def get_form(self, request, obj=None, **kwargs):
form = super().get_form(request, obj, **kwargs) form = super().get_form(request, obj, **kwargs)
form.base_fields['speakers'].queryset = Participant.objects.filter(site=request.conference.site) form.base_fields['speakers'].queryset = Participant.objects.filter(site=request.conference.site)
@ -36,8 +36,13 @@ class TalkAdmin(SiteAdminMixin, admin.ModelAdmin):
return form return form
class VoteAdmin(admin.ModelAdmin):
def get_queryset(self, request):
return super().get_queryset(request).filter(talk__site=request.conference.site)
admin.site.register(Conference, ConferenceAdmin) admin.site.register(Conference, ConferenceAdmin)
admin.site.register(Participant, ParticipantAdmin) admin.site.register(Participant, ParticipantAdmin)
admin.site.register(Talk, TalkAdmin) admin.site.register(Talk, TalkAdmin)
admin.site.register(TalkCategory, TalkCategoryAdmin) admin.site.register(TalkCategory, TalkCategoryAdmin)
admin.site.register(Vote) admin.site.register(Vote, VoteAdmin)

View File

@ -11,3 +11,15 @@ class StaffRequiredMixin(UserPassesTestMixin):
class OnSiteMixin: class OnSiteMixin:
def get_queryset(self): def get_queryset(self):
return super().get_queryset().filter(site=self.request.conference.site) return super().get_queryset().filter(site=self.request.conference.site)
class OnSiteAdminMixin:
exclude = ('site',)
def get_queryset(self, request):
return super().get_queryset(request).filter(site=request.conference.site)
def save_model(self, request, obj, form, change):
if not change:
obj.site = get_current_site(request)
super().save_model(request, obj, form, change)

View File

@ -1,13 +0,0 @@
from django.contrib.sites.shortcuts import get_current_site
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)