From a50fb8ce240d2b7b81558eae84e4fa44044df2a2 Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Sat, 20 Feb 2021 04:33:54 +0100 Subject: [PATCH] Use autocomplete for list of wishlists (WIP) Note to self: forgetting to add dal to INSTALLED_APPS leads to names in it not being available, although dal itself exists. --- wish/settings.py | 3 +++ wishlist/admin.py | 6 ++++++ wishlist/urls.py | 2 ++ wishlist/views_autocomplete.py | 14 ++++++++++++++ 4 files changed, 25 insertions(+) create mode 100644 wishlist/views_autocomplete.py diff --git a/wish/settings.py b/wish/settings.py index 6f69684..b60f325 100644 --- a/wish/settings.py +++ b/wish/settings.py @@ -38,6 +38,9 @@ INSTALLED_APPS = [ 'django.contrib.messages', 'django.contrib.staticfiles', + 'dal', + 'dal_select2', + 'utils', 'wishlist', ] diff --git a/wishlist/admin.py b/wishlist/admin.py index 36b7ff2..85fe77a 100644 --- a/wishlist/admin.py +++ b/wishlist/admin.py @@ -4,10 +4,16 @@ import wishlist.models as m admin.site.register(m.WishList) from django.forms import ModelForm +from dal import autocomplete class WishedItemAdminForm(ModelForm): class Meta: model = m.WishedItem fields = '__all__' + widgets = { + 'wishlists': autocomplete.ModelSelect2Multiple( + url='wishlist_list_autocomplete', + ), + } @admin.register(m.WishedItem) class WishedItemAdmin(admin.ModelAdmin): diff --git a/wishlist/urls.py b/wishlist/urls.py index 6c1622b..7224896 100644 --- a/wishlist/urls.py +++ b/wishlist/urls.py @@ -1,8 +1,10 @@ from django.urls import path from . import views as v +from . import views_autocomplete as ac urlpatterns = [ path('user/', v.UserWishLists.as_view(), name='wishlists_user'), path('item/', v.WishedItemView.as_view(), name='wished_item'), path('', v.WishListView.as_view(), name='wishlist'), + path('autocomplete/wishlists', ac.WishListAutocomplete.as_view(), name='wishlist_list_autocomplete'), ] diff --git a/wishlist/views_autocomplete.py b/wishlist/views_autocomplete.py new file mode 100644 index 0000000..7bc080a --- /dev/null +++ b/wishlist/views_autocomplete.py @@ -0,0 +1,14 @@ +from dal import autocomplete +from wishlist.models import WishList + +class WishListAutocomplete(autocomplete.Select2QuerySetView): + def get_queryset(self): + if not self.request.user.is_authenticated: + return WishList.objects.none() + qs = WishList.objects.all().filter(owner=self.request.user) + + if self.q: + qs = qs.filter(name__startswith=self.q) + + return qs +