from media import *
from language import *
from system import *
+from format import *
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):
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",
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):
<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>
<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>
{% 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>
</div>
{% endblock infos %}
-{% block related %}
+{% block related %}
{% endblock %}
{% block delete %}
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,
'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'))
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)
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):