From 69b211b153e674874476d6385146f650eaa282e8 Mon Sep 17 00:00:00 2001 From: erichhasl Date: Wed, 5 Jul 2017 11:13:22 +0200 Subject: [PATCH 1/2] use select fields with search for foreignkeys --- jdav_web/jdav_web/settings.py | 1 + jdav_web/mailer/admin.py | 4 +++- jdav_web/material/admin.py | 6 ++++++ jdav_web/members/admin.py | 23 ++++++++++++++++------- 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/jdav_web/jdav_web/settings.py b/jdav_web/jdav_web/settings.py index e4ef85f..7405a65 100644 --- a/jdav_web/jdav_web/settings.py +++ b/jdav_web/jdav_web/settings.py @@ -45,6 +45,7 @@ INSTALLED_APPS = [ 'material.apps.MaterialConfig', 'members.apps.MembersConfig', 'mailer.apps.MailerConfig', + 'easy_select2', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', diff --git a/jdav_web/mailer/admin.py b/jdav_web/mailer/admin.py index 0186315..78b5076 100644 --- a/jdav_web/mailer/admin.py +++ b/jdav_web/mailer/admin.py @@ -4,6 +4,7 @@ from django.utils.translation import ugettext_lazy as _ from django.shortcuts import render from django.db import models from django import forms +from easy_select2 import apply_select2 from .models import Message, Attachment, MessageForm from .mailutils import NOT_SENT, PARTLY_SENT @@ -19,7 +20,8 @@ class MessageAdmin(admin.ModelAdmin): list_display = ('subject', 'get_recipients', 'sent') change_form_template = "mailer/change_form.html" formfield_overrides = { - models.ManyToManyField: {'widget': forms.CheckboxSelectMultiple} + models.ManyToManyField: {'widget': forms.CheckboxSelectMultiple}, + models.ForeignKey: {'widget': apply_select2(forms.Select)} } inlines = [AttachmentInline] diff --git a/jdav_web/material/admin.py b/jdav_web/material/admin.py index 87b1dd8..0753758 100644 --- a/jdav_web/material/admin.py +++ b/jdav_web/material/admin.py @@ -1,8 +1,11 @@ from django.contrib import admin from django.utils.translation import ugettext_lazy as _ from django.contrib.admin import SimpleListFilter +from django.db import models +from django import forms from .models import MaterialPart, Ownership +from easy_select2 import apply_select2 # Register your models here. @@ -13,6 +16,9 @@ class OwnershipInline(admin.StackedInline): """ model = Ownership extra = 0 + formfield_overrides = { + models.ForeignKey: {'widget': apply_select2(forms.Select)} + } class NotTooOldFilter(SimpleListFilter): diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index 7768320..1d34c92 100644 --- a/jdav_web/members/admin.py +++ b/jdav_web/members/admin.py @@ -11,13 +11,14 @@ from django import forms from django.contrib import admin from django.contrib.admin import DateFieldListFilter from django.utils.translation import ugettext_lazy as translate -from django.db.models import TextField, ManyToManyField +from django.db.models import TextField, ManyToManyField, ForeignKey from django.forms import Textarea, RadioSelect, TypedChoiceField from django.shortcuts import render from .models import (Member, Group, MemberList, MemberOnList, Klettertreff, KlettertreffAttendee, ActivityCategory) from django.conf import settings +from easy_select2 import apply_select2 # Register your models here. @@ -27,7 +28,8 @@ class MemberAdmin(admin.ModelAdmin): list_display = ('name', 'birth_date', 'gets_newsletter', 'get_group', 'queue', 'created', 'comments') list_filter = ('group', 'gets_newsletter', 'queue') formfield_overrides = { - ManyToManyField: {'widget': forms.CheckboxSelectMultiple} + ManyToManyField: {'widget': forms.CheckboxSelectMultiple}, + ForeignKey: {'widget': apply_select2(forms.Select)} } change_form_template = "members/change_member.html" @@ -71,9 +73,10 @@ class MemberOnListInline(admin.StackedInline): model = MemberOnList extra = 0 formfield_overrides = { - TextField: {'widget': Textarea( - attrs={'rows': 1, - 'cols': 40})}, + TextField: {'widget': Textarea(attrs={'rows': 1, + 'cols': 40})}, + ManyToManyField: {'widget': forms.CheckboxSelectMultiple}, + ForeignKey: {'widget': apply_select2(forms.Select)} } @@ -83,7 +86,8 @@ class MemberListAdmin(admin.ModelAdmin): list_display = ['__str__', 'date'] actions = ['convert_to_pdf', 'generate_notes'] formfield_overrides = { - ManyToManyField: {'widget': forms.CheckboxSelectMultiple} + ManyToManyField: {'widget': forms.CheckboxSelectMultiple}, + ForeignKey: {'widget': apply_select2(forms.Select)} } def __init__(self, *args, **kwargs): @@ -309,6 +313,10 @@ class KlettertreffAttendeeInline(admin.StackedInline): model = KlettertreffAttendee form = KlettertreffAttendeeInlineForm extra = 0 + formfield_overrides = { + ManyToManyField: {'widget': forms.CheckboxSelectMultiple}, + ForeignKey: {'widget': apply_select2(forms.Select)} + } class KlettertreffAdmin(admin.ModelAdmin): @@ -337,7 +345,8 @@ class KlettertreffAdmin(admin.ModelAdmin): context) formfield_overrides = { - ManyToManyField: {'widget': forms.CheckboxSelectMultiple} + ManyToManyField: {'widget': forms.CheckboxSelectMultiple}, + ForeignKey: {'widget': apply_select2(forms.Select)} } From bd6bcff42deb60e053f9e7f2bfbfb02043f97411 Mon Sep 17 00:00:00 2001 From: erichhasl Date: Wed, 5 Jul 2017 11:14:38 +0200 Subject: [PATCH 2/2] add easy-select-2 to requirements --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 19e4b8f..770ca5c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ Django==1.10.2 Pillow==3.4.2 mysqlclient==1.3.9 +django-easy-select2==1.3.4