From e4312ad6898ef35a3232ea974e3f3dffec83ffae Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Wed, 17 Aug 2016 20:07:01 +0200 Subject: [PATCH] Fix Brief autocomplete form --- app/organization/magazine/admin.py | 3 ++- app/organization/magazine/forms.py | 28 ++++++++++++++++++++++++++++ app/organization/magazine/models.py | 23 +---------------------- app/organization/magazine/urls.py | 6 +----- app/organization/magazine/views.py | 10 ++++++---- app/scripts/app.sh | 2 ++ 6 files changed, 40 insertions(+), 32 deletions(-) create mode 100644 app/organization/magazine/forms.py diff --git a/app/organization/magazine/admin.py b/app/organization/magazine/admin.py index b1dd7562..fe2d6a7d 100644 --- a/app/organization/magazine/admin.py +++ b/app/organization/magazine/admin.py @@ -4,7 +4,8 @@ from copy import deepcopy from mezzanine.core.admin import * from mezzanine.pages.admin import PageAdmin #from orderable.admin import OrderableTabularInline #OrderableAdmin, -from organization.magazine.models import Article, Brief, Topic, ArticleImage, BriefForm +from organization.magazine.models import Article, Brief, Topic, ArticleImage +from organization.magazine.forms import BriefForm class ArticleImageInline(TabularDynamicInlineAdmin): diff --git a/app/organization/magazine/forms.py b/app/organization/magazine/forms.py new file mode 100644 index 00000000..4388d2b3 --- /dev/null +++ b/app/organization/magazine/forms.py @@ -0,0 +1,28 @@ +from dal import autocomplete + +import dal_queryset_sequence +import dal_select2_queryset_sequence + +from organization.magazine.models import Article, Topic, Brief + + +class BriefForm(autocomplete.FutureModelForm): + + # selected_object = forms.ModelChoiceField( + # queryset=ContentType.objects.all(), + # widget=autocomplete.ModelSelect2(url='object-autocomplete') + # ) + + content_object = dal_queryset_sequence.fields.QuerySetSequenceModelField( + queryset=autocomplete.QuerySetSequence( + Article.objects.all(), + Topic.objects.all(), + # ContentType.objects.all(), + ), + required=False, + widget=dal_select2_queryset_sequence.widgets.QuerySetSequenceSelect2('object-autocomplete'), + ) + + class Meta: + model = Brief + fields = ('__all__') diff --git a/app/organization/magazine/models.py b/app/organization/magazine/models.py index aa388d00..8bcc1314 100644 --- a/app/organization/magazine/models.py +++ b/app/organization/magazine/models.py @@ -6,7 +6,7 @@ from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType from django.utils.translation import ugettext_lazy as _ from django.core.urlresolvers import reverse, reverse_lazy -from dal import autocomplete + from mezzanine.core.models import RichText, Displayable, Slugged from mezzanine.pages.models import Page from mezzanine.blog.models import BlogPost @@ -82,27 +82,6 @@ class Brief(Displayable, RichText): #Orderable # model = Brief # fields = ('__all__') -class BriefForm(autocomplete.FutureModelForm): - - selected_object = forms.ModelChoiceField( - queryset=ContentType.objects.all(), - widget=autocomplete.ModelSelect2(url='object-autocomplete') - ) - - # content_object = autocomplete.QuerySetSequenceModelField( - # queryset=autocomplete.QuerySetSequence( - # #Article.objects.all(), - # #Topic.objects.all(), - # #ContentType.objects.all(), - # ), - # required=False, - # widget=autocomplete.QuerySetSequenceSelect2('object-autocomplete'), - # ) - - class Meta: - model = Brief - fields = ('__all__') - class Topic(Page, RichText): """Topic for magazine menu""" diff --git a/app/organization/magazine/urls.py b/app/organization/magazine/urls.py index effc824c..4f188b67 100644 --- a/app/organization/magazine/urls.py +++ b/app/organization/magazine/urls.py @@ -15,9 +15,5 @@ urlpatterns = [ url("^article/$", ArticleListView.as_view(), name="magazine-article-list"), url("^article/detail/(?P.*)%s$" % _slash, ArticleDetailView.as_view(), name="magazine-article-detail"), url("^topic/detail/(?P.*)%s$" % _slash, TopicDetailView.as_view(), name='topic-detail'), - url( - r'^object-autocomplete/$', - ObjectAutocomplete.as_view(), - name='object-autocomplete', - ), + url("^object-autocomplete/$", ObjectAutocomplete.as_view(), name='object-autocomplete'), ] diff --git a/app/organization/magazine/views.py b/app/organization/magazine/views.py index cfb0326e..a5763f85 100644 --- a/app/organization/magazine/views.py +++ b/app/organization/magazine/views.py @@ -15,6 +15,8 @@ from organization.team.models import Department from organization.core.views import SlugMixin from django.template.defaultfilters import slugify +from dal import autocomplete +from dal_select2_queryset_sequence.views import Select2QuerySetSequenceView class ArticleDetailView(SlugMixin, DetailView): @@ -83,7 +85,8 @@ class TopicDetailView(SlugMixin, DetailView): context = super(TopicDetailView, self).get_context_data(**kwargs) return context -class ObjectAutocomplete(autocomplete.Select2QuerySetView): + +class ObjectAutocomplete(Select2QuerySetSequenceView): def get_queryset(self): #qs = chain(Topic.objects.all(), Article.objects.all()) @@ -91,13 +94,12 @@ class ObjectAutocomplete(autocomplete.Select2QuerySetView): articles = Article.objects.all() topics = Topic.objects.all() - if self.q: #qs = qs.filter(name__istartswith=self.q) articles = articles.filter(name__icontains=self.q) topics = topics.filter(name__icontains=self.q) - qs = QuerySetSequence(articles, topics) + qs = autocomplete.QuerySetSequence(articles, topics) if self.q: # This would apply the filter on all the querysets @@ -106,5 +108,5 @@ class ObjectAutocomplete(autocomplete.Select2QuerySetView): # This will limit each queryset so that they show an equal number # of results. qs = self.mixup_querysets(qs) - print(qs) + # print(qs) return qs diff --git a/app/scripts/app.sh b/app/scripts/app.sh index 3a9d01ba..96d6ad6f 100644 --- a/app/scripts/app.sh +++ b/app/scripts/app.sh @@ -22,6 +22,8 @@ patterns='*.js;*.css;*.jpg;*.jpeg;*.gif;*.png;*.svg;*.ttf;*.eot;*.woff;*.woff2' # pip install -U https://forge.ircam.fr/p/django-eve/source/download/dev/ # pip install -U https://github.com/stephenmcd/grappelli-safe/archive/dynamic_stacked.zip # pip install django-querysetsequence +pip install django-autocomplete-light django-querysetsequence +/usr/bin/yes | pip uninstall django-orderable chown -R $uid:$gid $media -- 2.39.5