from django.contrib import admin
from mezzanine.core.admin import *
from organization.media.models import *
+from organization.media.forms import *
class MediaTranscodedAdmin(TabularDynamicInlineAdmin):
model = Media
inlines = (MediaTranscodedAdmin,)
+
+class PlaylistMediaInline(TabularDynamicInlineAdmin):
+
+ model = PlaylistMedia
+
+
class PlaylistMediaInline(TabularDynamicInlineAdmin):
model = PlaylistMedia
+ form = PlaylistMediaForm
class PlaylistAdmin(BaseTranslationModelAdmin):
model = MediaCategory
+
+
+
+
admin.site.register(Media, MediaAdmin)
admin.site.register(Playlist, PlaylistAdmin)
admin.site.register(MediaCategory, MediaCategoryAdmin)
--- /dev/null
+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__')
--- /dev/null
+# -*- 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'),
+ ),
+ ]
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()
class Meta:
verbose_name = "media"
verbose_name_plural = "medias"
- ordering = ('-created_at',)
+ ordering = ('created',)
def __str__(self):
return self.title
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
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'),
]
# 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