From: Emilie Date: Thu, 13 Oct 2016 16:16:11 +0000 (+0200) Subject: Playlist : add autocomplete on media X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=49f3a0042fd009e714dbcaea172719fecb836413;p=mezzo.git Playlist : add autocomplete on media --- diff --git a/app/organization/media/admin.py b/app/organization/media/admin.py index 7e20aa10..5566790d 100644 --- a/app/organization/media/admin.py +++ b/app/organization/media/admin.py @@ -2,6 +2,7 @@ from copy import deepcopy from django.contrib import admin from mezzanine.core.admin import * from organization.media.models import * +from organization.media.forms import * class MediaTranscodedAdmin(TabularDynamicInlineAdmin): @@ -14,9 +15,16 @@ class MediaAdmin(BaseTranslationModelAdmin): model = Media inlines = (MediaTranscodedAdmin,) + +class PlaylistMediaInline(TabularDynamicInlineAdmin): + + model = PlaylistMedia + + class PlaylistMediaInline(TabularDynamicInlineAdmin): model = PlaylistMedia + form = PlaylistMediaForm class PlaylistAdmin(BaseTranslationModelAdmin): @@ -30,6 +38,10 @@ class MediaCategoryAdmin(BaseTranslationModelAdmin): model = MediaCategory + + + + admin.site.register(Media, MediaAdmin) admin.site.register(Playlist, PlaylistAdmin) admin.site.register(MediaCategory, MediaCategoryAdmin) diff --git a/app/organization/media/forms.py b/app/organization/media/forms.py new file mode 100644 index 00000000..8e9d7a04 --- /dev/null +++ b/app/organization/media/forms.py @@ -0,0 +1,22 @@ +from dal import autocomplete + +import dal_queryset_sequence +import dal_select2_queryset_sequence + +from django import forms +from django.forms.widgets import HiddenInput +from django.forms import ModelForm +from mezzanine.core.models import Orderable +from organization.media.models import * + + +class PlaylistMediaForm(forms.ModelForm): + + media = forms.ModelChoiceField( + queryset=Media.objects.all(), + widget=autocomplete.ModelSelect2(url='media-autocomplete') + ) + + class Meta: + model = PlaylistMedia + fields = ('__all__') diff --git a/app/organization/media/migrations/0008_auto_20161013_1810.py b/app/organization/media/migrations/0008_auto_20161013_1810.py new file mode 100644 index 00000000..11dc94bc --- /dev/null +++ b/app/organization/media/migrations/0008_auto_20161013_1810.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.10 on 2016-10-13 16:10 +from __future__ import unicode_literals + +from django.db import migrations +import mezzanine.core.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('organization-media', '0007_auto_20161013_1631'), + ] + + operations = [ + migrations.AlterModelOptions( + name='media', + options={'ordering': ('created',), 'verbose_name': 'media', 'verbose_name_plural': 'medias'}, + ), + migrations.RemoveField( + model_name='media', + name='created_at', + ), + migrations.AlterField( + model_name='mediatranscoded', + name='file', + field=mezzanine.core.fields.FileField(max_length=1024, verbose_name='file'), + ), + ] diff --git a/app/organization/media/models.py b/app/organization/media/models.py index 234a9350..1edb66ae 100644 --- a/app/organization/media/models.py +++ b/app/organization/media/models.py @@ -26,7 +26,6 @@ class Media(Displayable): external_id = models.CharField(_('media id'), max_length=128) poster_url = models.URLField(_('poster'), max_length=1024, blank=True) - created_at = models.DateTimeField(auto_now=True) category = models.ForeignKey('MediaCategory', verbose_name=_('category'), related_name='medias', blank=True, null=True, on_delete=models.SET_NULL) # objects = SearchableManager() @@ -35,7 +34,7 @@ class Media(Displayable): class Meta: verbose_name = "media" verbose_name_plural = "medias" - ordering = ('-created_at',) + ordering = ('created',) def __str__(self): return self.title diff --git a/app/organization/media/urls.py b/app/organization/media/urls.py index 55f1ad05..0528ace7 100644 --- a/app/organization/media/urls.py +++ b/app/organization/media/urls.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals import django.views.i18n from django.conf.urls import patterns, include, url from django.conf.urls.i18n import i18n_patterns +from django.contrib.auth.decorators import permission_required from mezzanine.core.views import direct_to_template from mezzanine.conf import settings @@ -13,4 +14,5 @@ from organization.media.views import * urlpatterns = [ url(r'^playlist/list/$', PlaylistListView.as_view(), name="organization-playlist-list"), url(r'^playlist/detail/(?P.*)/$', PlaylistDetailView.as_view(), name="organization-playlist-detail"), + url("^media-autocomplete/$", permission_required('playlist.can_edit')(PlayListMediaView.as_view()), name='media-autocomplete'), ] diff --git a/app/organization/media/views.py b/app/organization/media/views.py index 37616eee..f99044a6 100644 --- a/app/organization/media/views.py +++ b/app/organization/media/views.py @@ -33,3 +33,20 @@ class PlaylistListView(ListView): # playlist_list += [audio_playlist for audio_playlist in audio_playlists] # playlist_list.sort(key=lambda x: x.created_at, reverse=True) # return playlist_list + + +class PlayListMediaView(autocomplete.Select2QuerySetView): + + def get_queryset(self): + + qs = Media.objects.all() + + media_title = self.forwarded.get('title', None) + + if media_title: + qs = qs.filter(title=media_title) + + if self.q: + qs = qs.filter(title__istartswith=self.q) + + return qs