]> git.parisson.com Git - telemeta.git/commitdiff
fix item edit form with format
authoryomguy <yomguy@parisson.com>
Mon, 21 May 2012 15:06:39 +0000 (17:06 +0200)
committeryomguy <yomguy@parisson.com>
Mon, 21 May 2012 15:06:39 +0000 (17:06 +0200)
telemeta/forms/__init__.py
telemeta/models/core.py
telemeta/models/format.py
telemeta/templates/telemeta/mediaitem_detail.html
telemeta/templates/telemeta/mediaitem_edit.html
telemeta/views/base.py

index c781078987a202884fe772b7a1941a876034fec4..c479f555733fb12230e614ee2882f5a9ddea8061 100644 (file)
@@ -2,3 +2,4 @@
 from media import *
 from language import *
 from system import *
+from format import *
index ce88c86e0ad6c92018cacbf106f0cc9084d0937c..d5adc1e807da93322836c5ba113adee67d391db3 100644 (file)
@@ -346,12 +346,12 @@ class ModelCore(EnhancedModel):
                 required.append(field)
         return required
 
-    def save(self, force_insert=False, force_update=False):
+    def save(self, force_insert=False, force_update=False, *args, **kwargs):
         required = self.required_fields()
         for field in required:
             if not getattr(self, field.name):
                 raise RequiredFieldError(self, field)
-        super(ModelCore, self).save(force_insert, force_update)
+        super(ModelCore, self).save(force_insert, force_update, *args, **kwargs)
 
     @classmethod
     def get_dom_name(cls):
index 50b930333200d041b00f0b27769ad17d28413554..900bfb00c6a6492c14dbf17ee1c2c7780de1fca0 100644 (file)
@@ -56,9 +56,9 @@ class Format(ModelCore):
     item                  = ForeignKey('MediaItem', related_name="format", verbose_name = _("item"))
     original_format       = WeakForeignKey(OriginalFormat, related_name="format",
                                      verbose_name = _("original format"))
-    original_code         = CharField(_('original code'), required=True)
+    original_code         = CharField(_('original code'))
     original_number       = CharField(_('original number'))
-    original_status       = CharField(_('status'))
+    original_status       = CharField(_('original status'))
     original_state        = TextField(_('technical properties / conservation state'))
     original_comments     = TextField(_('comments / notes'))
     original_location     = WeakForeignKey(OriginalLocation, related_name="format",
@@ -78,13 +78,15 @@ class Format(ModelCore):
     tape_reference      = CharField(_('tape reference'))
     sticker_presence    = BooleanField(_('sticker presence'))
 
-
     class Meta(MetaCore):
         db_table = 'media_formats'
         verbose_name = _('format')
 
     def __unicode__(self):
-        return self.original_format
+        if self.original_format:
+            return self.original_format
+        else:
+            return 'unknown'
 
     @property
     def public_id(self):
index 130c3ffe706275d0ffd1c80d28fa46f78f96ef90..2eb65ce28a90789a8b3d93121fab22e17e4f1264 100644 (file)
@@ -302,20 +302,21 @@ Item : <a href="{% url telemeta-item-detail item.public_id %}">{{ item }}</a>
                 <dt>{% trans "Media type" %}</dt><dd>{% trans mime_type|mime_to_media_type %}</dd>
                     {% dl_field item "approx_duration" %}
 
-                    {% if physical_format %}
-                     {% dl_field physical_format "original_code" %}
-                     {% dl_field physical_format "tape_number" %}
-                     {% dl_field physical_format "status" %}
-                     {% dl_field physical_format "conservation_state" %}
-                     {% dl_field physical_format "tape_length" %}
-                     {% dl_field physical_format "tape_width" %}
-                     {% dl_field physical_format "tape_speed" %}
-                     {% dl_field physical_format "tape_vendor" %}
-                     {% dl_field physical_format "tape_thickness" %}
-                     {% dl_field physical_format "tape_diameter" %}
-                     {% dl_field physical_format "tape_reference" %}
-                     <dt>{% trans "Remarks" %}</dt>
-                     <dd>{{ physical_format.comments|html_line_break|safe }}</dd>
+                    {% if format %}
+                     {% dl_field format "original_format" %}
+                     {% dl_field format "original_code" %}
+                     {% dl_field format "original_number" %}
+                     {% dl_field format "original_status" %}
+                     {% dl_field format "original_location" %}
+                     {% dl_field format "original_state" %}
+                     <dt>{% trans "Comments" %}</dt>
+                     <dd>{{ format.original_comments|html_line_break|safe }}</dd>
+                     {% dl_field format "tape_wheel_diameter" %}
+                     {% dl_field format "tape_thickness" %}
+                     {% dl_field format "tape_speed" %}
+                     {% dl_field format "tape_vendor" %}
+                     {% dl_field format "tape_reference" %}
+                     {% dl_field format "sticker_presence" %}
                     {% endif %}
                 </dl>
 
index de4b6dbafb4803346bdacf4556f240308bc1eee2..e0f03d18cd19c5a25dc37a76d69c88e1306a0340 100644 (file)
 <a href="{% url telemeta-item-detail item.public_id %}" class="component_icon button icon_cancel">{% trans "Cancel" %}</a>
 {% endblock %}
 
-{% block infos %}    
+{% block infos %}
 <div class="infos">
-    <form enctype="multipart/form-data" id="_editItemForm" method="post" action="">{% csrf_token %}   
+    <form enctype="multipart/form-data" id="_editItemForm" method="post" action="">{% csrf_token %}
     <table>
+    {% for form in forms %}
     <tr><td colspan="2">{% for error in form.non_field_errors %}<li class="error">{{ error }}</li>{% endfor %}</td></tr>
     {% for field in form %}
     <tr>
-    {% if field.html_name == "copied_from_item" %}
+    {% if field.html_name in hidden_fields %}
         <td>{{ field.label_tag.as_hidden }}{{ field.as_hidden }}</td>
     {% else %}
         <tr><td class="error">{{ field.errors }}</td></tr>
@@ -32,6 +33,7 @@
     {% endif %}
     </tr>
     {% endfor %}
+    {% endfor %}
     </table>
     <div align="center" style="margin-top:3ex;">
     <a href="{% url telemeta-item-detail item.public_id %}" class="component_icon button icon_cancel">{% trans "Cancel" %}</a>
@@ -51,7 +53,7 @@
 </div>
 {% endblock infos %}
 
-{% block related %} 
+{% block related %}
 {% endblock %}
 
 {% block delete %}
index 1d80d0a025d6163887bcebacf5c16bd5bb69e94c..6e3991da27711847caf66fa754de9faaf8bfa17a 100644 (file)
@@ -659,7 +659,9 @@ class ItemView(object):
         else:
             last_revision = None
 
-        physical_format = item.original_format
+        format = ''
+        if Format.objects.filter(item=item):
+            format = item.format.get()
 
         return render(request, template,
                     {'item': item, 'export_formats': formats,
@@ -668,7 +670,7 @@ class ItemView(object):
                     'previous' : previous, 'next' : next, 'marker': marker_id, 'playlists' : playlists,
                     'public_access': public_access, 'width': width, 'height': height,
                     'related_media': related_media, 'mime_type': mime_type, 'last_revision': last_revision,
-                    'physical_format': physical_format,
+                    'format': format,
                     })
 
     @method_decorator(permission_required('telemeta.change_mediaitem'))
@@ -699,14 +701,18 @@ class ItemView(object):
         if 'quicktime' in mime_type:
             mime_type = 'video/mp4'
 
+        format, created = Format.objects.get_or_create(item=item)
+
         if request.method == 'POST':
-            form = MediaItemForm(data=request.POST, files=request.FILES, instance=item)
-            if form.is_valid():
-                form.save()
-                code = form.cleaned_data['code']
+            item_form = MediaItemForm(data=request.POST, files=request.FILES, instance=item, prefix='item')
+            format_form = FormatForm(data=request.POST, instance=format, prefix='format')
+            if item_form.is_valid() and format_form.is_valid():
+                item_form.save()
+                format_form.save()
+                code = item_form.cleaned_data['code']
                 if not code:
                     code = str(item.id)
-                if form.files:
+                if item_form.files:
                     self.cache_data.delete_item_data(code)
                     self.cache_export.delete_item_data(code)
                     flags = MediaItemTranscodingFlag.objects.filter(item=item)
@@ -718,13 +724,18 @@ class ItemView(object):
                 item.set_revision(request.user)
                 return HttpResponseRedirect('/archives/items/'+code)
         else:
-            form = MediaItemForm(instance=item)
+            item_form = MediaItemForm(instance=item, prefix='item')
+            format_form = FormatForm(instance=format, prefix='format')
+            forms = [item_form, format_form]
+
+        hidden_fields = ['item-copied_from_item', 'format-item']
 
         return render(request, template,
                     {'item': item, 'export_formats': formats,
                     'visualizers': graphers, 'visualizer_id': grapher_id,
-                    'audio_export_enabled': getattr(settings, 'TELEMETA_DOWNLOAD_ENABLED', True), "form": form,
-                    'previous' : previous, 'next' : next, 'mime_type': mime_type,
+                    'audio_export_enabled': getattr(settings, 'TELEMETA_DOWNLOAD_ENABLED', True),
+                    'forms': forms, 'previous' : previous, 'next' : next, 'mime_type': mime_type,
+                    'hidden_fields': hidden_fields,
                     })
 
     def related_media_item_stream(self, request, item_public_id, media_id):