diff options
author | Magnus Hagander | 2016-07-15 13:48:15 +0000 |
---|---|---|
committer | Magnus Hagander | 2016-07-15 13:48:15 +0000 |
commit | c393b7a9563f797316f3e105e9fdb7e34f746574 (patch) | |
tree | 6ec2c394c4b6c916627466d111a2536e32f4480c /postgresqleu/confwiki/admin.py | |
parent | 58afbc2013cdb4276712f3a82518659c10df3a7a (diff) |
Replace references to User and Registration with dynamic lookups
This goes through most cases and replaces massive dropdowns or
pairs-of-selects with ajax based lookups using django-selectable. Some
pages go from over 500Kb down to about 30Kb, so it should render th
interface much faster.
Note: only forms in /admin/ are handled by this. Most user facing forms
are already taken care of.
Diffstat (limited to 'postgresqleu/confwiki/admin.py')
-rw-r--r-- | postgresqleu/confwiki/admin.py | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/postgresqleu/confwiki/admin.py b/postgresqleu/confwiki/admin.py index 17524326..ffffcb70 100644 --- a/postgresqleu/confwiki/admin.py +++ b/postgresqleu/confwiki/admin.py @@ -1,22 +1,32 @@ from django.contrib import admin from django import forms +from selectable.forms.widgets import AutoCompleteSelectWidget, AutoCompleteSelectMultipleWidget +from postgresqleu.confreg.lookups import RegistrationLookup +from postgresqleu.util.admin import SelectableWidgetAdminFormMixin + from postgresqleu.confreg.models import Conference, ConferenceRegistration, RegistrationType from models import Wikipage, WikipageHistory, WikipageSubscriber from models import AttendeeSignup -class WikipageAdminForm(forms.ModelForm): +class WikipageAdminForm(SelectableWidgetAdminFormMixin, forms.ModelForm): class Meta: model = Wikipage exclude = [] + widgets = { + 'viewer_attendee': AutoCompleteSelectMultipleWidget(lookup_class=RegistrationLookup), + 'editor_attendee': AutoCompleteSelectMultipleWidget(lookup_class=RegistrationLookup), + } def __init__(self, *args, **kwargs): super(WikipageAdminForm, self).__init__(*args, **kwargs) try: self.fields['author'].queryset = ConferenceRegistration.objects.filter(conference=self.instance.conference) self.fields['viewer_attendee'].queryset = ConferenceRegistration.objects.filter(conference=self.instance.conference) + self.fields['viewer_attendee'].widget.widget.update_query_parameters({'conference': self.instance.conference.id}) self.fields['editor_attendee'].queryset = ConferenceRegistration.objects.filter(conference=self.instance.conference) + self.fields['editor_attendee'].widget.widget.update_query_parameters({'conference': self.instance.conference.id}) self.fields['viewer_regtype'].queryset = RegistrationType.objects.filter(conference=self.instance.conference) self.fields['editor_regtype'].queryset = RegistrationType.objects.filter(conference=self.instance.conference) @@ -41,7 +51,6 @@ class WikipageSubscriberInline(admin.TabularInline): class WikipageAdmin(admin.ModelAdmin): form = WikipageAdminForm inlines = [WikipageHistoryInline, WikipageSubscriberInline] - filter_horizontal = ['viewer_attendee', 'editor_attendee', ] class AttendeeSignupAdminForm(forms.ModelForm): class Meta: |