diff --git a/pgweb/contributors/admin.py b/pgweb/contributors/admin.py
index f1824053..9f2204e7 100644
--- a/pgweb/contributors/admin.py
+++ b/pgweb/contributors/admin.py
@@ -1,5 +1,27 @@
+from django import forms
from django.contrib import admin
+
+from selectable.forms.widgets import AutoCompleteSelectWidget
+
+from pgweb.core.lookups import UserLookup
+
from models import Contributor, ContributorType
+class ContributorAdminForm(forms.ModelForm):
+ class Meta:
+ model = Contributor
+ exclude = ()
+ widgets = {
+ 'user': AutoCompleteSelectWidget(lookup_class=UserLookup),
+ }
+
+ def __init__(self, *args, **kwargs):
+ super(ContributorAdminForm, self).__init__(*args, **kwargs)
+ self.fields['user'].widget.can_add_related = False
+ self.fields['user'].widget.can_change_related = False
+
+class ContributorAdmin(admin.ModelAdmin):
+ form = ContributorAdminForm
+
admin.site.register(ContributorType)
-admin.site.register(Contributor)
+admin.site.register(Contributor, ContributorAdmin)
diff --git a/pgweb/core/admin.py b/pgweb/core/admin.py
index a010b143..40cff332 100644
--- a/pgweb/core/admin.py
+++ b/pgweb/core/admin.py
@@ -1,14 +1,33 @@
+from django import forms
from django.contrib import admin
+from selectable.forms.widgets import AutoCompleteSelectMultipleWidget
+
from pgweb.core.models import Version, OrganisationType, Organisation
from pgweb.core.models import ImportedRSSFeed, ImportedRSSItem
from pgweb.core.models import ModerationNotification
+from pgweb.core.lookups import UserLookup
+
+class OrganisationAdminForm(forms.ModelForm):
+ class Meta:
+ model = Organisation
+ exclude = ()
+ widgets = {
+ 'managers': AutoCompleteSelectMultipleWidget(lookup_class=UserLookup),
+ }
+
+ def __init__(self, *args, **kwargs):
+ super(OrganisationAdminForm, self).__init__(*args, **kwargs)
+ self.fields['managers'].widget.can_add_related = False
+ self.fields['managers'].widget.can_change_related = False
+ self.fields['managers'].widget.can_delete_related = False
+
class OrganisationAdmin(admin.ModelAdmin):
+ form = OrganisationAdminForm
list_display = ('name', 'approved', 'lastconfirmed',)
list_filter = ('approved',)
ordering = ('name', )
- filter_horizontal = ('managers', )
search_fields = ('name', )
class VersionAdmin(admin.ModelAdmin):
diff --git a/pgweb/core/lookups.py b/pgweb/core/lookups.py
new file mode 100644
index 00000000..806d1d8a
--- /dev/null
+++ b/pgweb/core/lookups.py
@@ -0,0 +1,25 @@
+from django.contrib.auth.models import User
+from selectable.base import ModelLookup
+from selectable.registry import registry
+from selectable.decorators import staff_member_required
+
+
+@staff_member_required
+class UserLookup(ModelLookup):
+ model = User
+ search_fields = (
+ 'username__icontains',
+ 'first_name__icontains',
+ 'last_name__icontains',
+ )
+ filters = {'is_active': True, }
+
+ def get_item_value(self, item):
+ # Display for currently selected item
+ return u"%s (%s)" % (item.username, item.get_full_name())
+
+ def get_item_label(self, item):
+ # Display for choice listings
+ return u"%s (%s)" % (item.username, item.get_full_name())
+
+registry.register(UserLookup)
diff --git a/pgweb/settings.py b/pgweb/settings.py
index e43c3b6b..c31cf40b 100644
--- a/pgweb/settings.py
+++ b/pgweb/settings.py
@@ -98,6 +98,7 @@ INSTALLED_APPS = [
'django.contrib.admin',
'django_markwhat',
'django.contrib.staticfiles',
+ 'pgweb.selectable',
'pgweb.core',
'pgweb.mailqueue',
'pgweb.account',
diff --git a/pgweb/urls.py b/pgweb/urls.py
index e73f4eaa..e439f4c9 100644
--- a/pgweb/urls.py
+++ b/pgweb/urls.py
@@ -135,6 +135,9 @@ urlpatterns = patterns('',
# Uncomment the next line to enable the admin:
(r'^admin/', include(admin.site.urls)),
+ # We use selectable...
+ (r'^selectable/', include('selectable.urls')),
+
# This should not happen in production - serve by the webserver natively!
url(r'^(favicon.ico)$', 'django.views.static.serve', {
'document_root': 'media',
diff --git a/templates/admin/base_site.html b/templates/admin/base_site.html
index ed75f40d..78cdfa2d 100644
--- a/templates/admin/base_site.html
+++ b/templates/admin/base_site.html
@@ -1,2 +1,16 @@
{%extends "admin/base.html"%}
{%block branding%}Welcome to the PostgreSQL website administration site | Pending moderation | Purge from frontend{%endblock%}
+
+{%block extrahead%}
+
+
+
+
+
+
+{%endblock%}