From 6c7d6a5cf471f39a5e8f8e4f42fb428fb4c42e4e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Aleksander=20=C5=81ukasz?= Date: Wed, 9 Oct 2013 12:04:38 +0200 Subject: [PATCH] Allow for adding covers from a disk --- apps/cover/forms.py | 14 ++++++ ...0002_auto__chg_field_image_download_url.py | 34 ++++++++++++++ apps/cover/models.py | 4 +- apps/cover/templates/cover/add_image.html | 47 +++++++++++++++++-- apps/cover/views.py | 2 +- 5 files changed, 95 insertions(+), 6 deletions(-) create mode 100644 apps/cover/migrations/0002_auto__chg_field_image_download_url.py diff --git a/apps/cover/forms.py b/apps/cover/forms.py index 0173134a..67a0c531 100755 --- a/apps/cover/forms.py +++ b/apps/cover/forms.py @@ -13,6 +13,20 @@ class ImageAddForm(forms.ModelForm): class Meta: model = Image + def __init__(self, *args, **kwargs): + super(ImageAddForm, self).__init__(*args, **kwargs) + self.fields['file'].required = self.fields['download_url'].required = False + + def clean_download_url(self): + return self.cleaned_data['download_url'] or None + + def clean(self): + cleaned_data = super(ImageAddForm, self).clean() + if not cleaned_data.get('download_url', None) and not cleaned_data.get('file', None): + raise forms.ValidationError('No image specified') + return cleaned_data + + class ImageEditForm(forms.ModelForm): """Form used for editing a Book.""" class Meta: diff --git a/apps/cover/migrations/0002_auto__chg_field_image_download_url.py b/apps/cover/migrations/0002_auto__chg_field_image_download_url.py new file mode 100644 index 00000000..8a64c39d --- /dev/null +++ b/apps/cover/migrations/0002_auto__chg_field_image_download_url.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Changing field 'Image.download_url' + db.alter_column(u'cover_image', 'download_url', self.gf('django.db.models.fields.URLField')(max_length=200, unique=True, null=True)) + + def backwards(self, orm): + + # User chose to not deal with backwards NULL issues for 'Image.download_url' + raise RuntimeError("Cannot reverse this migration. 'Image.download_url' and its values cannot be restored.") + + models = { + u'cover.image': { + 'Meta': {'object_name': 'Image'}, + 'author': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'download_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'unique': 'True', 'null': 'True'}), + 'file': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'license_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'license_url': ('django.db.models.fields.URLField', [], {'max_length': '255', 'blank': 'True'}), + 'source_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + } + } + + complete_apps = ['cover'] \ No newline at end of file diff --git a/apps/cover/models.py b/apps/cover/models.py index 6900e78e..5574f345 100644 --- a/apps/cover/models.py +++ b/apps/cover/models.py @@ -21,8 +21,8 @@ class Image(models.Model): license_name = models.CharField(max_length=255, verbose_name=_('license name')) license_url = models.URLField(max_length=255, blank=True, verbose_name=_('license URL')) source_url = models.URLField(verbose_name=_('source URL')) - download_url = models.URLField(unique=True, verbose_name=_('image download URL')) - file = models.ImageField(upload_to='cover/image', editable=False, verbose_name=_('file')) + download_url = models.URLField(unique=True, verbose_name=_('image download URL'), null = True) + file = models.ImageField(upload_to='cover/image', editable=True, verbose_name=_('file')) class Meta: verbose_name = _('cover image') diff --git a/apps/cover/templates/cover/add_image.html b/apps/cover/templates/cover/add_image.html index ed7adfbb..1854555f 100755 --- a/apps/cover/templates/cover/add_image.html +++ b/apps/cover/templates/cover/add_image.html @@ -1,6 +1,33 @@ {% extends "catalogue/base.html" %} {% load i18n %} +{% block add_js %} + {{block.super}} + +{% endblock %} {% block content %}

{% trans "Add image" %}

@@ -14,10 +41,24 @@ - -
{% csrf_token %} +{% csrf_token %} +{{ form.non_field_errors }} - {{ form.as_table }} + {% for field in form %} + {% if field.name != 'download_url' and field.name != 'file' %} + + + + + {% endif %} + {% endfor %} + + + + + + +
{{field.errors}} {{field.label}}{{field}}
{{ form.download_url.errors }} {{form.download_url.label}}{{form.download_url}}{{ form.file.errors }} Lub {{form.file.label}}{{form.file}}
diff --git a/apps/cover/views.py b/apps/cover/views.py index 2a21b5c5..3d30a2a5 100644 --- a/apps/cover/views.py +++ b/apps/cover/views.py @@ -125,7 +125,7 @@ def add_image(request): if ff.is_valid(): form = forms.ImageAddForm(ff.cleaned_data) else: - form = forms.ImageAddForm(request.POST) + form = forms.ImageAddForm(request.POST, request.FILES) if form.is_valid(): obj = form.save() return HttpResponseRedirect(obj.get_absolute_url()) -- 2.20.1