]> git.parisson.com Git - mezzo.git/commitdiff
Playlist : add autocomplete on media
authorEmilie <zawadzki@ircam.fr>
Thu, 13 Oct 2016 16:16:11 +0000 (18:16 +0200)
committerEmilie <zawadzki@ircam.fr>
Thu, 13 Oct 2016 16:16:11 +0000 (18:16 +0200)
app/organization/media/admin.py
app/organization/media/forms.py [new file with mode: 0644]
app/organization/media/migrations/0008_auto_20161013_1810.py [new file with mode: 0644]
app/organization/media/models.py
app/organization/media/urls.py
app/organization/media/views.py

index 7e20aa10ff3d422a0e0d429245358e86675b95d8..5566790daf97d64e3e84dc4a7696decef8bd7249 100644 (file)
@@ -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 (file)
index 0000000..8e9d7a0
--- /dev/null
@@ -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 (file)
index 0000000..11dc94b
--- /dev/null
@@ -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'),
+        ),
+    ]
index 234a93502dc523c47895eb2ab8706f780c641cc5..1edb66ae49660e853ad3126f9f855394ee12495d 100644 (file)
@@ -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
index 55f1ad05dfe5a2ff2164e0126b51eddc4a0c3ee7..0528ace75a74639078969ee1c0750aad9a1039c2 100644 (file)
@@ -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<slug>.*)/$', PlaylistDetailView.as_view(), name="organization-playlist-detail"),
+    url("^media-autocomplete/$",  permission_required('playlist.can_edit')(PlayListMediaView.as_view()), name='media-autocomplete'),
 ]
index 37616eee0d521bf12543a46e3b2acd91d83c5ddb..f99044a688ef69616ff3dd56ce87d8418cda0904 100644 (file)
@@ -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