diff --git a/fmartingrcom/apps/projects/__init__.py b/fmartingrcom/apps/projects/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/fmartingrcom/apps/projects/admin.py b/fmartingrcom/apps/projects/admin.py new file mode 100644 index 0000000..4aafaa0 --- /dev/null +++ b/fmartingrcom/apps/projects/admin.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +# django +from django.contrib import admin + +# 3rd party +import reversion + +# app +from . import models + + +# +# Group +# +class GroupAdmin(reversion.VersionAdmin): + list_display = ('name', 'order', ) + list_display_links = ('name', ) + list_editable = ('order', ) + + prepopulated_fields = {"slug": ("name",)} + + fieldsets = [ + (None, { + 'fields': ('name', 'slug', 'order', ) + }), + ] + +admin.site.register(models.Group, GroupAdmin) + + +# +# Project +# +class ProjectAdmin(reversion.VersionAdmin): + list_display = ('title', 'group', 'company', 'role', ) + + prepopulated_fields = {"slug": ("title",)} + +admin.site.register(models.Project, ProjectAdmin) diff --git a/fmartingrcom/apps/projects/migrations/0001_initial.py b/fmartingrcom/apps/projects/migrations/0001_initial.py new file mode 100644 index 0000000..fffeb6d --- /dev/null +++ b/fmartingrcom/apps/projects/migrations/0001_initial.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import fmartingrcom.apps.projects.models +import ckeditor.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Group', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=128)), + ('slug', models.SlugField(max_length=128)), + ('order', models.IntegerField(default=1)), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Project', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('title', models.CharField(max_length=128)), + ('image', models.ImageField(default=None, upload_to=fmartingrcom.apps.projects.models.project_upload_to)), + ('slug', models.SlugField(max_length=128)), + ('date', models.DateTimeField()), + ('company', models.CharField(max_length=128, null=True, blank=True)), + ('role', models.CharField(max_length=128)), + ('description', ckeditor.fields.RichTextField()), + ('visible', models.BooleanField(default=True)), + ('stack', models.CharField(default=None, max_length=256, null=True, blank=True)), + ('url', models.CharField(default=None, max_length=256, null=True, blank=True)), + ('group', models.ForeignKey(related_name='projects', to='projects.Group')), + ], + options={ + 'ordering': ['-date'], + }, + bases=(models.Model,), + ), + ] diff --git a/fmartingrcom/apps/projects/migrations/__init__.py b/fmartingrcom/apps/projects/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/fmartingrcom/apps/projects/models.py b/fmartingrcom/apps/projects/models.py new file mode 100644 index 0000000..7def447 --- /dev/null +++ b/fmartingrcom/apps/projects/models.py @@ -0,0 +1,48 @@ +# coding: utf-8 + +# python +import os + +# django +from django.db import models + +# 3rd party +from ckeditor.fields import RichTextField + + +# +# Work project +# +class Group(models.Model): + name = models.CharField(max_length=128) + slug = models.SlugField(max_length=128) + order = models.IntegerField(default=1) + + def __unicode__(self): + return self.name + + +def project_upload_to(ins, filename): + name, ext = os.path.splitext(filename) + return 'projects/{}{}'.format(ins.slug, ext) + + +class Project(models.Model): + group = models.ForeignKey(Group, related_name='projects') + title = models.CharField(max_length=128) + image = models.ImageField(upload_to=project_upload_to, default=None) + slug = models.SlugField(max_length=128) + date = models.DateTimeField() + company = models.CharField(max_length=128, null=True, blank=True) + role = models.CharField(max_length=128) + description = RichTextField() + visible = models.BooleanField(default=True) + stack = models.CharField(max_length=256, null=True, blank=True, + default=None) + url = models.CharField(max_length=256, null=True, blank=True, default=None) + + def __unicode__(self): + return self.title + + class Meta: + ordering = ['-date'] diff --git a/fmartingrcom/apps/projects/urls.py b/fmartingrcom/apps/projects/urls.py new file mode 100644 index 0000000..84748be --- /dev/null +++ b/fmartingrcom/apps/projects/urls.py @@ -0,0 +1,18 @@ +# coding: utf-8 + +# django +from django.conf.urls import patterns, url + +# app +from . import views + + +urlpatterns = patterns( + None, + # Project list + url( + r'^$', + views.ListView.as_view(), + name='list' + ), +) diff --git a/fmartingrcom/apps/projects/views.py b/fmartingrcom/apps/projects/views.py new file mode 100644 index 0000000..5612801 --- /dev/null +++ b/fmartingrcom/apps/projects/views.py @@ -0,0 +1,29 @@ +# coding: utf-8 + +# django +from django.shortcuts import render_to_response +from django.template import RequestContext + +# project +from fmartingrcom.apps._core.views import View +from fmartingrcom.apps.config.models import SiteConfiguration + +# app +from . import models + +config = SiteConfiguration.objects.get() + + +class ListView(View): + section = 'projects' + template = 'projects/list.jinja' + + def get(self, request, page_number=1): + + data = { + 'section': self.section, + 'groups': models.Group.objects.all().order_by('order'), + } + + context = RequestContext(request, data) + return render_to_response(self.template, context_instance=context) diff --git a/fmartingrcom/settings/base.py b/fmartingrcom/settings/base.py index fb7e6db..f64667b 100644 --- a/fmartingrcom/settings/base.py +++ b/fmartingrcom/settings/base.py @@ -42,6 +42,7 @@ INSTALLED_APPS = ( # 'fmartingrcom.apps.homepage', 'fmartingrcom.apps.config', 'fmartingrcom.apps.blog', + 'fmartingrcom.apps.projects', 'django_jinja', @@ -217,5 +218,10 @@ SUIT_CONFIG = { 'label': 'Blog', 'icon': 'icon-book', }, + { + 'app': 'projects', + 'label': 'Projects', + 'icon': 'icon-folder', + } ), }