From df50823d5fe15f91ce6801082159913db22aa88a Mon Sep 17 00:00:00 2001 From: yomguy Date: Mon, 9 May 2011 18:11:03 +0200 Subject: [PATCH] add performances edit view and templates with formsets, fix 'copied_from_item' override for item_edit template --- telemeta/models/media.py | 20 +++++--- telemeta/models/query.py | 14 +++++ .../telemeta/mediaitem_performances_edit.html | 1 + .../telemeta_default/mediaitem_detail.html | 3 ++ .../telemeta_default/mediaitem_edit.html | 3 +- .../mediaitem_performances_edit.html | 51 +++++++++++++++++++ telemeta/urls.py | 2 + telemeta/web/base.py | 16 ++++++ 8 files changed, 103 insertions(+), 7 deletions(-) create mode 100644 telemeta/templates/telemeta/mediaitem_performances_edit.html create mode 100644 telemeta/templates/telemeta_default/mediaitem_performances_edit.html diff --git a/telemeta/models/media.py b/telemeta/models/media.py index 07dd5a15..9c2e85ba 100644 --- a/telemeta/models/media.py +++ b/telemeta/models/media.py @@ -43,6 +43,7 @@ import re from telemeta.models.location import LocationRelation, Location from telemeta.models.system import Revision from telemeta.models.query import * +from telemeta.models.instrument import * from django.forms import ModelForm @@ -138,8 +139,8 @@ class MediaCollection(MediaResource): objects = MediaCollectionManager() def __unicode__(self): - if self.title: - return self.title +# if self.title: +# return self.title return self.code @@ -324,6 +325,10 @@ class MediaItemPerformance(ModelCore): class Meta(MetaCore): db_table = 'media_item_performances' +class MediaItemPerformanceForm(ModelForm): + class Meta: + model = MediaItemPerformance + class MediaPart(MediaResource): "Describe an item part" element_type = 'part' @@ -350,8 +355,8 @@ class Playlist(ModelCore): db_table = 'playlists' def __unicode__(self): - return self.name - + return self.title + class PlaylistForm(ModelForm): class Meta: model = Playlist @@ -368,7 +373,7 @@ class PlaylistResource(ModelCore): class Meta(MetaCore): db_table = 'playlist_resources' - + class MediaItemMarker(MediaResource): "2D marker object : text value vs. time" @@ -386,7 +391,10 @@ class MediaItemMarker(MediaResource): db_table = 'media_markers' def __unicode__(self): - return self.title + if self.title: + return self.title + else: + return self.public_id class Search(ModelCore): "Keywork search" diff --git a/telemeta/models/query.py b/telemeta/models/query.py index 0324abff..450b88ac 100644 --- a/telemeta/models/query.py +++ b/telemeta/models/query.py @@ -394,3 +394,17 @@ class LocationManager(CoreManager): return self.get_query_set().flatname_map(*args, **kwargs) flatname_map.__doc__ = LocationQuerySet.flatname_map.__doc__ + +#class MediaItemPerformanceQuerySet(CoreQuerySet): +# +# def by_item(self, item): +# return self.filter(item=item) +# +# +#class MediaItemPerformanceManager(CoreManager): +# +# def get_query_set(self): +# "Return performance query set" +# return MediaItemPerformanceQuerySet(self.model) + + diff --git a/telemeta/templates/telemeta/mediaitem_performances_edit.html b/telemeta/templates/telemeta/mediaitem_performances_edit.html new file mode 100644 index 00000000..d01dd245 --- /dev/null +++ b/telemeta/templates/telemeta/mediaitem_performances_edit.html @@ -0,0 +1 @@ +{% extends "telemeta_default/mediaitem_performances_edit.html" %} diff --git a/telemeta/templates/telemeta_default/mediaitem_detail.html b/telemeta/templates/telemeta_default/mediaitem_detail.html index 9a3bd778..bf2339ce 100644 --- a/telemeta/templates/telemeta_default/mediaitem_detail.html +++ b/telemeta/templates/telemeta_default/mediaitem_detail.html @@ -260,6 +260,9 @@ {% endblock musical_data %} + {% if user.is_authenticated and perms.telemeta.change_mediaitem %} + {% trans "Edit" %} + {% endif %}
{% block general_data %}
diff --git a/telemeta/templates/telemeta_default/mediaitem_edit.html b/telemeta/templates/telemeta_default/mediaitem_edit.html index 542e4fc3..0a0afcb1 100644 --- a/telemeta/templates/telemeta_default/mediaitem_edit.html +++ b/telemeta/templates/telemeta_default/mediaitem_edit.html @@ -29,11 +29,12 @@ {% endif %} {% endif %} + {% else %} + {{ field.label_tag.as_hidden }}{{ field.as_hidden }} {% endif %} {% endfor %}
- {% trans "Cancel" %}

Item : {{ item }}

+ {% endblock %} + {% block title_buttons %} +
{% trans "Cancel" %} + {% endblock %} + +{% block content %} + {% block infos %} +
+
{% csrf_token %} + + {{ formset.management_form }} + {% for form in formset.forms %} + + + {% for field in form %} + + {% if not "media_item" in field.html_name %} + {% if "id" in field.html_name %} + + {% else %} + + {% endif %} + {% else %} + + {% endif %} + + {% endfor %} +
Performance :
{{ field.label_tag.as_hidden }}{{ field.as_hidden }}{{ field.label_tag }}: {{ field }}{{ field.label_tag.as_hidden }}{{ field.as_hidden }}
+ {% endfor %} + + + +
+
+ + {% endblock infos %} +{% endblock content %} diff --git a/telemeta/urls.py b/telemeta/urls.py index 3eba1216..ca70ed14 100644 --- a/telemeta/urls.py +++ b/telemeta/urls.py @@ -97,6 +97,8 @@ urlpatterns = patterns('', dict(template='telemeta/mediaitem_add.html'), name="telemeta-item-add"), url(r'^items/(?P[A-Za-z0-9._-]+)/player/$', web_view.item_detail, dict(template='telemeta/mediaitem_player.html'), name="telemeta-item-player"), + url(r'^items/(?P[A-Za-z0-9._-]+)/performances/$', web_view.item_performances_edit, + dict(template='telemeta/mediaitem_performances_edit.html'), name="telemeta-item-performances_edit"), # Markers url(r'^markers/(?P[A-Za-z0-9]+)/$', web_view.item_detail, name="telemeta-item-detail-marker"), diff --git a/telemeta/web/base.py b/telemeta/web/base.py index 5127b905..15689cc1 100644 --- a/telemeta/web/base.py +++ b/telemeta/web/base.py @@ -350,6 +350,22 @@ class WebView(object): 'audio_export_enabled': getattr(settings, 'TELEMETA_DOWNLOAD_ENABLED', True), "form": form, 'previous' : previous, 'next' : next, }) + + @method_decorator(permission_required('telemeta.change_mediaitem')) + def item_performances_edit(self, request, public_id, template): + item = MediaItem.objects.get(public_id=public_id) + PerformanceFormSet = modelformset_factory(MediaItemPerformance) + queryset = MediaItemPerformance.objects.filter(media_item=item) + if request.method == 'POST': + formset = PerformanceFormSet(data=request.POST, queryset=queryset) + if formset.is_valid(): + formset.save() + return HttpResponseRedirect('/items/'+public_id) + else: + formset = PerformanceFormSet(queryset=queryset) + return render(request, template, + {'item': item, 'formset': formset,}) + @method_decorator(permission_required('telemeta.add_mediaitem')) def item_add(self, request, template='telemeta/mediaitem_add.html'): -- 2.39.5