From 8bea780d3362634b4d7bb0a5c48b7156002fa7fb Mon Sep 17 00:00:00 2001 From: Pedro Gracia Date: Wed, 21 Dec 2011 19:00:50 +0100 Subject: [PATCH 1/7] - i18n support via django-hvad (nani) --- README | 2 ++ portfolio/admin.py | 23 ++++++++++++++++------- portfolio/models.py | 35 ++++++++++++++++++++++------------- 3 files changed, 40 insertions(+), 20 deletions(-) diff --git a/README b/README index e69de29..b90fd56 100644 --- a/README +++ b/README @@ -0,0 +1,2 @@ +Dependencies: + - django-hvad: https://github.com/KristianOellegaard/django-hvad diff --git a/portfolio/admin.py b/portfolio/admin.py index e143ecd..7a11e39 100644 --- a/portfolio/admin.py +++ b/portfolio/admin.py @@ -1,6 +1,7 @@ from django.contrib import admin from django.db import models from django.contrib import admin +from nani.admin import TranslatableAdmin from models import Service, Client, Proyect, Image, Country from cms.plugins.text.widgets.wymeditor_widget import WYMEditor @@ -17,13 +18,13 @@ def formfield_for_dbfield(self,db_field, **kwargs): return super(ImageInline, self).formfield_for_dbfield(db_field, **kwargs) -class ProyectAdmin(admin.ModelAdmin): +class ProyectAdmin(TranslatableAdmin): inlines = [ImageInline] formfield_overrides = { # models.TextField : {'widget': WYMEditor}, } - list_display = ("name", "sequence",) - list_editable = ( "sequence", ) + #list_display = ("name", "sequence",) + #list_editable = ( "sequence", ) search_fields = ['name'] class Media: js = ( @@ -31,9 +32,17 @@ class Media: "https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.min.js", "js/order.js") +class ServiceAdmin(TranslatableAdmin): + pass -admin.site.register(Service) -admin.site.register(Client) -admin.site.register(Country) -admin.site.register(Proyect,ProyectAdmin) +class ClientAdmin(TranslatableAdmin): + pass + +class CountryAdmin(TranslatableAdmin): + pass + +admin.site.register(Service, ServiceAdmin) +admin.site.register(Client, ClientAdmin) +admin.site.register(Country, CountryAdmin) +admin.site.register(Proyect, ProyectAdmin) diff --git a/portfolio/models.py b/portfolio/models.py index 4a223ef..e53a244 100644 --- a/portfolio/models.py +++ b/portfolio/models.py @@ -1,41 +1,50 @@ from django.db import models from cms.models import CMSPlugin from django.core.exceptions import ValidationError +from nani.models import TranslatableModel, TranslatedFields - -class Service(models.Model): - name = models.CharField(max_length=100) - +class Service(TranslatableModel): + translations = TranslatedFields( + name = models.CharField(max_length=100) + ) def __unicode__(self): return self.name -class Client(models.Model): - name = models.CharField(max_length= 100) +class Client(TranslatableModel): + translations = TranslatedFields( + name = models.CharField(max_length=100) + ) def __unicode__(self): return self.name -class Country(models.Model): - name = models.CharField(max_length = 100) +class Country(TranslatableModel): + translations = TranslatedFields( + name = models.CharField(max_length=100) + ) def __unicode__(self): return self.name -class Proyect(models.Model): +class Proyect(TranslatableModel): service = models.ForeignKey(Service, related_name="proyects") country = models.ForeignKey(Country, related_name="proyects") client = models.ForeignKey(Client, related_name ="proyects") - name = models.CharField(max_length= 100) main_image = models.ImageField(upload_to= "uploaded_images") - description_short = models.TextField( help_text = u"las lineas nuevas son consideradas br tag") - description_long = models.TextField(help_text=u"las lineas nuevas son consideradas br tag ") url = models.URLField(blank=True) slug = models.SlugField() twitter = models.CharField(max_length=20, help_text="twitt via ..", blank = True, null = True) facebook_like = models.URLField( blank =True, null = True) sequence = models.IntegerField() + + translations = TranslatedFields( + name = models.CharField(max_length=100), + description_short = models.TextField(help_text = u"las lineas nuevas son consideradas br tag"), + description_long = models.TextField(help_text=u"las lineas nuevas son consideradas br tag "), + ) @models.permalink def get_absolute_url(self): return ("portafolio-proyect", [self.slug]) + def get_url(self): if "http://" in self.url: st = self.url.split("http://")[1] @@ -47,9 +56,9 @@ def get_url(self): st = st[:-1] return st - def __unicode__(self): return self.name + class Image(models.Model): image = models.ImageField(upload_to= "uploaded_images") main = models.BooleanField(default =False) From 59f2e0ce69a9957740b743c43a6ad1614ec26ae4 Mon Sep 17 00:00:00 2001 From: Pedro Gracia Date: Fri, 30 Dec 2011 11:50:29 +0100 Subject: [PATCH 2/7] fixed word "proyect" -> "project" --- portfolio/admin.py | 6 +- portfolio/cms_plugins.py | 3 +- portfolio/migrations/0001_initial.py | 138 +++++++++++++++--- ...0002_auto__add_field_proyect_main_image.py | 88 ----------- portfolio/models.py | 8 +- portfolio/templates/portfolio/index.html | 27 ++-- portfolio/templates/portfolio/menu.html | 4 +- portfolio/templates/portfolio/portfolio.html | 8 +- portfolio/templates/portfolio/small.html | 50 +++++++ portfolio/urls.py | 2 +- portfolio/views.py | 23 ++- 11 files changed, 206 insertions(+), 151 deletions(-) delete mode 100644 portfolio/migrations/0002_auto__add_field_proyect_main_image.py create mode 100644 portfolio/templates/portfolio/small.html diff --git a/portfolio/admin.py b/portfolio/admin.py index 7a11e39..a351a02 100644 --- a/portfolio/admin.py +++ b/portfolio/admin.py @@ -3,7 +3,7 @@ from django.contrib import admin from nani.admin import TranslatableAdmin -from models import Service, Client, Proyect, Image, Country +from models import Service, Client, Project, Image, Country from cms.plugins.text.widgets.wymeditor_widget import WYMEditor from sorl.thumbnail.admin import AdminInlineImageMixin, AdminImageWidget from django.conf.urls.defaults import patterns @@ -18,7 +18,7 @@ def formfield_for_dbfield(self,db_field, **kwargs): return super(ImageInline, self).formfield_for_dbfield(db_field, **kwargs) -class ProyectAdmin(TranslatableAdmin): +class ProjectAdmin(TranslatableAdmin): inlines = [ImageInline] formfield_overrides = { # models.TextField : {'widget': WYMEditor}, @@ -44,5 +44,5 @@ class CountryAdmin(TranslatableAdmin): admin.site.register(Service, ServiceAdmin) admin.site.register(Client, ClientAdmin) admin.site.register(Country, CountryAdmin) -admin.site.register(Proyect, ProyectAdmin) +admin.site.register(Project, ProjectAdmin) diff --git a/portfolio/cms_plugins.py b/portfolio/cms_plugins.py index 7be1872..7275ebc 100644 --- a/portfolio/cms_plugins.py +++ b/portfolio/cms_plugins.py @@ -8,8 +8,9 @@ class PortfolioPluginBase(CMSPluginBase): model = PortfolioPlugin render_template = 'portfolio/portfolio.html' name = _("Portafolio") + def render(self, context, instance, placeholder): - context.update({'instance':instance,'placeholder':placeholder}) + context.update({'instance':instance, 'placeholder':placeholder}) return context plugin_pool.register_plugin(PortfolioPluginBase) diff --git a/portfolio/migrations/0001_initial.py b/portfolio/migrations/0001_initial.py index 31be419..dd7a625 100644 --- a/portfolio/migrations/0001_initial.py +++ b/portfolio/migrations/0001_initial.py @@ -8,43 +8,88 @@ class Migration(SchemaMigration): def forwards(self, orm): + # Adding model 'ServiceTranslation' + db.create_table('portfolio_service_translation', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=100)), + ('language_code', self.gf('django.db.models.fields.CharField')(max_length=15, db_index=True)), + ('master', self.gf('django.db.models.fields.related.ForeignKey')(related_name='translations', null=True, to=orm['portfolio.Service'])), + )) + db.send_create_signal('portfolio', ['ServiceTranslation']) + + # Adding unique constraint on 'ServiceTranslation', fields ['language_code', 'master'] + db.create_unique('portfolio_service_translation', ['language_code', 'master_id']) + # Adding model 'Service' db.create_table('portfolio_service', ( ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=100)), )) db.send_create_signal('portfolio', ['Service']) + # Adding model 'ClientTranslation' + db.create_table('portfolio_client_translation', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=100)), + ('language_code', self.gf('django.db.models.fields.CharField')(max_length=15, db_index=True)), + ('master', self.gf('django.db.models.fields.related.ForeignKey')(related_name='translations', null=True, to=orm['portfolio.Client'])), + )) + db.send_create_signal('portfolio', ['ClientTranslation']) + + # Adding unique constraint on 'ClientTranslation', fields ['language_code', 'master'] + db.create_unique('portfolio_client_translation', ['language_code', 'master_id']) + # Adding model 'Client' db.create_table('portfolio_client', ( ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=100)), )) db.send_create_signal('portfolio', ['Client']) + # Adding model 'CountryTranslation' + db.create_table('portfolio_country_translation', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=100)), + ('language_code', self.gf('django.db.models.fields.CharField')(max_length=15, db_index=True)), + ('master', self.gf('django.db.models.fields.related.ForeignKey')(related_name='translations', null=True, to=orm['portfolio.Country'])), + )) + db.send_create_signal('portfolio', ['CountryTranslation']) + + # Adding unique constraint on 'CountryTranslation', fields ['language_code', 'master'] + db.create_unique('portfolio_country_translation', ['language_code', 'master_id']) + # Adding model 'Country' db.create_table('portfolio_country', ( ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=100)), )) db.send_create_signal('portfolio', ['Country']) - # Adding model 'Proyect' - db.create_table('portfolio_proyect', ( + # Adding model 'ProjectTranslation' + db.create_table('portfolio_project_translation', ( ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('service', self.gf('django.db.models.fields.related.ForeignKey')(related_name='proyects', to=orm['portfolio.Service'])), - ('country', self.gf('django.db.models.fields.related.ForeignKey')(related_name='proyects', to=orm['portfolio.Country'])), - ('client', self.gf('django.db.models.fields.related.ForeignKey')(related_name='proyects', to=orm['portfolio.Client'])), ('name', self.gf('django.db.models.fields.CharField')(max_length=100)), ('description_short', self.gf('django.db.models.fields.TextField')()), ('description_long', self.gf('django.db.models.fields.TextField')()), + ('language_code', self.gf('django.db.models.fields.CharField')(max_length=15, db_index=True)), + ('master', self.gf('django.db.models.fields.related.ForeignKey')(related_name='translations', null=True, to=orm['portfolio.Project'])), + )) + db.send_create_signal('portfolio', ['ProjectTranslation']) + + # Adding unique constraint on 'ProjectTranslation', fields ['language_code', 'master'] + db.create_unique('portfolio_project_translation', ['language_code', 'master_id']) + + # Adding model 'Project' + db.create_table('portfolio_project', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('service', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='proyects', null=True, to=orm['portfolio.Service'])), + ('country', self.gf('django.db.models.fields.related.ForeignKey')(related_name='proyects', to=orm['portfolio.Country'])), + ('client', self.gf('django.db.models.fields.related.ForeignKey')(related_name='proyects', to=orm['portfolio.Client'])), + ('main_image', self.gf('django.db.models.fields.files.ImageField')(max_length=100)), ('url', self.gf('django.db.models.fields.URLField')(max_length=200, blank=True)), ('slug', self.gf('django.db.models.fields.SlugField')(max_length=50, db_index=True)), ('twitter', self.gf('django.db.models.fields.CharField')(max_length=20, null=True, blank=True)), ('facebook_like', self.gf('django.db.models.fields.URLField')(max_length=200, null=True, blank=True)), ('sequence', self.gf('django.db.models.fields.IntegerField')()), )) - db.send_create_signal('portfolio', ['Proyect']) + db.send_create_signal('portfolio', ['Project']) # Adding model 'Image' db.create_table('portfolio_image', ( @@ -52,7 +97,7 @@ def forwards(self, orm): ('image', self.gf('django.db.models.fields.files.ImageField')(max_length=100)), ('main', self.gf('django.db.models.fields.BooleanField')(default=False)), ('sequence', self.gf('django.db.models.fields.IntegerField')()), - ('proyect', self.gf('django.db.models.fields.related.ForeignKey')(related_name='images', to=orm['portfolio.Proyect'])), + ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='images', to=orm['portfolio.Project'])), )) db.send_create_signal('portfolio', ['Image']) @@ -66,24 +111,48 @@ def forwards(self, orm): db.create_table('portfolio_portfolioplugin_portfolio', ( ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), ('portfolioplugin', models.ForeignKey(orm['portfolio.portfolioplugin'], null=False)), - ('proyect', models.ForeignKey(orm['portfolio.proyect'], null=False)) + ('project', models.ForeignKey(orm['portfolio.project'], null=False)) )) - db.create_unique('portfolio_portfolioplugin_portfolio', ['portfolioplugin_id', 'proyect_id']) + db.create_unique('portfolio_portfolioplugin_portfolio', ['portfolioplugin_id', 'project_id']) def backwards(self, orm): + # Removing unique constraint on 'ProjectTranslation', fields ['language_code', 'master'] + db.delete_unique('portfolio_project_translation', ['language_code', 'master_id']) + + # Removing unique constraint on 'CountryTranslation', fields ['language_code', 'master'] + db.delete_unique('portfolio_country_translation', ['language_code', 'master_id']) + + # Removing unique constraint on 'ClientTranslation', fields ['language_code', 'master'] + db.delete_unique('portfolio_client_translation', ['language_code', 'master_id']) + + # Removing unique constraint on 'ServiceTranslation', fields ['language_code', 'master'] + db.delete_unique('portfolio_service_translation', ['language_code', 'master_id']) + + # Deleting model 'ServiceTranslation' + db.delete_table('portfolio_service_translation') + # Deleting model 'Service' db.delete_table('portfolio_service') + # Deleting model 'ClientTranslation' + db.delete_table('portfolio_client_translation') + # Deleting model 'Client' db.delete_table('portfolio_client') + # Deleting model 'CountryTranslation' + db.delete_table('portfolio_country_translation') + # Deleting model 'Country' db.delete_table('portfolio_country') - # Deleting model 'Proyect' - db.delete_table('portfolio_proyect') + # Deleting model 'ProjectTranslation' + db.delete_table('portfolio_project_translation') + + # Deleting model 'Project' + db.delete_table('portfolio_project') # Deleting model 'Image' db.delete_table('portfolio_image') @@ -118,12 +187,24 @@ def backwards(self, orm): }, 'portfolio.client': { 'Meta': {'object_name': 'Client'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'portfolio.clienttranslation': { + 'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'ClientTranslation', 'db_table': "'portfolio_client_translation'"}, 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': "orm['portfolio.Client']"}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) }, 'portfolio.country': { 'Meta': {'object_name': 'Country'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'portfolio.countrytranslation': { + 'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'CountryTranslation', 'db_table': "'portfolio_country_translation'"}, 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': "orm['portfolio.Country']"}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) }, 'portfolio.image': { @@ -131,32 +212,45 @@ def backwards(self, orm): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), 'main': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'proyect': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'images'", 'to': "orm['portfolio.Proyect']"}), + 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'images'", 'to': "orm['portfolio.Project']"}), 'sequence': ('django.db.models.fields.IntegerField', [], {}) }, 'portfolio.portfolioplugin': { 'Meta': {'object_name': 'PortfolioPlugin', 'db_table': "'cmsplugin_portfolioplugin'", '_ormbases': ['cms.CMSPlugin']}, 'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}), - 'portfolio': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['portfolio.Proyect']", 'symmetrical': 'False'}) + 'portfolio': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['portfolio.Project']", 'symmetrical': 'False'}) }, - 'portfolio.proyect': { - 'Meta': {'object_name': 'Proyect'}, + 'portfolio.project': { + 'Meta': {'object_name': 'Project'}, 'client': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'proyects'", 'to': "orm['portfolio.Client']"}), 'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'proyects'", 'to': "orm['portfolio.Country']"}), - 'description_long': ('django.db.models.fields.TextField', [], {}), - 'description_short': ('django.db.models.fields.TextField', [], {}), 'facebook_like': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'main_image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), 'sequence': ('django.db.models.fields.IntegerField', [], {}), - 'service': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'proyects'", 'to': "orm['portfolio.Service']"}), + 'service': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'proyects'", 'null': 'True', 'to': "orm['portfolio.Service']"}), 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'db_index': 'True'}), 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), 'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}) }, + 'portfolio.projecttranslation': { + 'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'ProjectTranslation', 'db_table': "'portfolio_project_translation'"}, + 'description_long': ('django.db.models.fields.TextField', [], {}), + 'description_short': ('django.db.models.fields.TextField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': "orm['portfolio.Project']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, 'portfolio.service': { 'Meta': {'object_name': 'Service'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'portfolio.servicetranslation': { + 'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'ServiceTranslation', 'db_table': "'portfolio_service_translation'"}, 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': "orm['portfolio.Service']"}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) } } diff --git a/portfolio/migrations/0002_auto__add_field_proyect_main_image.py b/portfolio/migrations/0002_auto__add_field_proyect_main_image.py deleted file mode 100644 index c41436c..0000000 --- a/portfolio/migrations/0002_auto__add_field_proyect_main_image.py +++ /dev/null @@ -1,88 +0,0 @@ -# encoding: 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): - - # Adding field 'Proyect.main_image' - db.add_column('portfolio_proyect', 'main_image', self.gf('django.db.models.fields.files.ImageField')(default='', max_length=100), keep_default=False) - - - def backwards(self, orm): - - # Deleting field 'Proyect.main_image' - db.delete_column('portfolio_proyect', 'main_image') - - - models = { - 'cms.cmsplugin': { - 'Meta': {'object_name': 'CMSPlugin'}, - 'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), - 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), - 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), - 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}), - 'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}), - 'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), - 'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), - 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) - }, - 'cms.placeholder': { - 'Meta': {'object_name': 'Placeholder'}, - 'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) - }, - 'portfolio.client': { - 'Meta': {'object_name': 'Client'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'portfolio.country': { - 'Meta': {'object_name': 'Country'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'portfolio.image': { - 'Meta': {'ordering': "('sequence',)", 'object_name': 'Image'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), - 'main': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'proyect': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'images'", 'to': "orm['portfolio.Proyect']"}), - 'sequence': ('django.db.models.fields.IntegerField', [], {}) - }, - 'portfolio.portfolioplugin': { - 'Meta': {'object_name': 'PortfolioPlugin', 'db_table': "'cmsplugin_portfolioplugin'", '_ormbases': ['cms.CMSPlugin']}, - 'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}), - 'portfolio': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['portfolio.Proyect']", 'symmetrical': 'False'}) - }, - 'portfolio.proyect': { - 'Meta': {'object_name': 'Proyect'}, - 'client': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'proyects'", 'to': "orm['portfolio.Client']"}), - 'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'proyects'", 'to': "orm['portfolio.Country']"}), - 'description_long': ('django.db.models.fields.TextField', [], {}), - 'description_short': ('django.db.models.fields.TextField', [], {}), - 'facebook_like': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'main_image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'sequence': ('django.db.models.fields.IntegerField', [], {}), - 'service': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'proyects'", 'to': "orm['portfolio.Service']"}), - 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'db_index': 'True'}), - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), - 'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}) - }, - 'portfolio.service': { - 'Meta': {'object_name': 'Service'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - } - } - - complete_apps = ['portfolio'] diff --git a/portfolio/models.py b/portfolio/models.py index e53a244..b1d4340 100644 --- a/portfolio/models.py +++ b/portfolio/models.py @@ -24,8 +24,8 @@ class Country(TranslatableModel): def __unicode__(self): return self.name -class Proyect(TranslatableModel): - service = models.ForeignKey(Service, related_name="proyects") +class Project(TranslatableModel): + service = models.ForeignKey(Service, related_name="proyects", blank = True, null = True) country = models.ForeignKey(Country, related_name="proyects") client = models.ForeignKey(Client, related_name ="proyects") main_image = models.ImageField(upload_to= "uploaded_images") @@ -63,11 +63,11 @@ class Image(models.Model): image = models.ImageField(upload_to= "uploaded_images") main = models.BooleanField(default =False) sequence = models.IntegerField() - proyect = models.ForeignKey(Proyect, related_name="images") + project = models.ForeignKey(Project, related_name="images") class Meta: ordering = ("sequence",) class PortfolioPlugin(CMSPlugin): - portfolio = models.ManyToManyField(Proyect) + portfolio = models.ManyToManyField(Project) diff --git a/portfolio/templates/portfolio/index.html b/portfolio/templates/portfolio/index.html index 0f20684..300b73a 100644 --- a/portfolio/templates/portfolio/index.html +++ b/portfolio/templates/portfolio/index.html @@ -1,15 +1,14 @@ {% load i18n cms_tags portfolio_menu thumbnail %} {% block menu_casos %} - {% portfolio_menu_client proyect %} + {% portfolio_menu_client project %} {% endblock %} -
-

{{ proyect.service.name }}

-

{{proyect.name}}

-

{{ proyect.country.name }}

+

{{ project.service.name }}

+

{{project.name}}

+

{{ project.country.name }}

- {{proyect.description_short|safe }} + {{project.description_short|safe }}

- {{proyect.description_long|safe }} + {{project.description_long|safe }}

- {{proyect.get_url}} + {{project.get_url}}

- {% if proyect.twitter%} - + {% if project.twitter%} + {% endif %}

- {%if proyect.facebook_like%} - + {%if project.facebook_like%} + {% endif %}
diff --git a/portfolio/templates/portfolio/menu.html b/portfolio/templates/portfolio/menu.html index 1571292..6999f1c 100644 --- a/portfolio/templates/portfolio/menu.html +++ b/portfolio/templates/portfolio/menu.html @@ -4,11 +4,11 @@