Skip to content

Commit

Permalink
openlibhums#509: Adds experimental M2M select library
Browse files Browse the repository at this point in the history
  • Loading branch information
mauromsl committed Feb 6, 2020
1 parent 5e362ca commit fbc9bab
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 1 deletion.
35 changes: 35 additions & 0 deletions src/cms/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,13 @@
from django.apps import apps
from django.http import Http404

from ajax_select import register, LookupChannel
from ajax_select.fields import AutoCompleteSelectMultipleField
from django.db.models import Q
from django_summernote.widgets import SummernoteWidget

from cms import models
from submission import models as submission_models


class PageForm(forms.ModelForm):
Expand Down Expand Up @@ -77,9 +81,40 @@ class Meta(CMSBlockForm.Meta):


class FeaturedArticlesBlockForm(CMSBlockForm):
featured_articles = AutoCompleteSelectMultipleField('articles')

class Meta(CMSBlockForm.Meta):
model = models.FeaturedArticlesBlock

def save(self, commit=True, *args, **kwargs):
instance = super().save(commit=False)
featured_articles = self.cleaned_data.pop("featured_articles", [])

if commit == True:
instance.save()
for seq, article in enumerate(featured_articles, start=1):
related, _ = models.CMSFeaturedArticle.objects.get_or_create(
article=article,
cms_block=instance,
)
related.sequence = seq
related.save()



@register("articles")
class FeaturedArticleLookup(LookupChannel):
model = submission_models.Article
def get_query(self, query_term, request):
articles = self.model.objects.filter(stage="Published")
if request.journal:
articles = articles.filter(journal=request.journal)
search_filter = (
Q(pk__contains=query_term if query_term.isdigit() else 0)
| Q(title__icontains=query_term))
return articles.filter(search_filter)



def prepare_cms_forms(cms_blocks):
prepared_forms = dict(CMS_BLOCK_FORMS)
Expand Down
6 changes: 5 additions & 1 deletion src/cms/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
__maintainer__ = "Birkbeck Centre for Technology and Publishing"


from django.conf.urls import url
from ajax_select import urls as ajax_select_urls
from django.conf.urls import url, include


from cms import views

Expand All @@ -18,4 +20,6 @@

url(r'^nav/$', views.nav, name='cms_nav'),
url(r'^nav/(?P<nav_id>\d+)/$', views.nav, name='cms_nav_edit'),

url(r'^ajax_select/', include(ajax_select_urls)),
]
4 changes: 4 additions & 0 deletions src/templates/admin/cms/home_page.html
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ <h2>Page Layout</h2>
<form method="post" name="{{ block_model|class_name }}">
{% csrf_token %}
<h3> {{ block_model|verbose_name}} Options </h3>
{{ block_form.media.css }}
{{ block_form }}
<input type="hidden" name="block" value="{{ block_model|class_name }}">
<button type="submit" class="success button">Save</button>
Expand Down Expand Up @@ -97,6 +98,9 @@ <h3> {{ block_model|verbose_name}} Options </h3>
$("#active").disableSelection();
</script>
{% include "elements/jqte.html" %}
{% for _, form in forms %}
{{ form.media.js }}
{% endfor %}
{% endblock js %}


0 comments on commit fbc9bab

Please sign in to comment.