diff --git a/elections/__init__.py b/elections/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/elections/admin.py b/elections/admin.py new file mode 100644 index 0000000..658f6f2 --- /dev/null +++ b/elections/admin.py @@ -0,0 +1,11 @@ +from django.contrib import admin + +from models import Election, Candidate + +class CandidateAdmin(admin.ModelAdmin): + list_display = ('name', 'created_at',) + list_filter = ('last_name',) + date_hierarchy = 'created_at' + +admin.site.register(Election) +admin.site.register(Candidate, CandidateAdmin) diff --git a/elections/models.py b/elections/models.py new file mode 100644 index 0000000..ecdbbe1 --- /dev/null +++ b/elections/models.py @@ -0,0 +1,35 @@ +from django.db import models + +# Create your models here. + +class Election(models.Model): + name = models.CharField(max_length=255) + slug = models.SlugField() + owner = models.ForeignKey('auth.User') + + created_at = models.DateTimeField(auto_now_add=True, editable=False) + updated_at = models.DateTimeField(auto_now=True, editable=False) + + + def __unicode__(self): + return u"%s" % self.name + + +class Candidate(models.Model): + first_name = models.CharField(max_length=255) + last_name = models.CharField(max_length=255) + slug = models.SlugField() + election = models.ForeignKey('Election') + + created_at = models.DateTimeField(auto_now_add=True, editable=False) + updated_at = models.DateTimeField(auto_now=True, editable=False) + + @property + def name(self): + return u"%(first_name)s %(last_name)s" % { + 'first_name': self.first_name, + 'last_name': self.last_name + } + + def __unicode__(self): + return self.name diff --git a/elections/templates/elections/base.html b/elections/templates/elections/base.html new file mode 100644 index 0000000..26d58ca --- /dev/null +++ b/elections/templates/elections/base.html @@ -0,0 +1,10 @@ + + +{% block title%}Candidator{% endblock title %} + + +{% block content %} +{% endblock content %} + + + diff --git a/elections/templates/elections/election_detail.html b/elections/templates/elections/election_detail.html new file mode 100644 index 0000000..f0d0ba7 --- /dev/null +++ b/elections/templates/elections/election_detail.html @@ -0,0 +1,9 @@ +{% extends "elections/base.html" %} + +{% block title %} +{{ block.super }} Election +{% endblock title %} + +{% block content %} +permalink {{ election.name }} +{% endblock content %} diff --git a/elections/templates/elections/election_list.html b/elections/templates/elections/election_list.html new file mode 100644 index 0000000..5d3cf39 --- /dev/null +++ b/elections/templates/elections/election_list.html @@ -0,0 +1,9 @@ +{% extends "elections/base.html" %} + +{% block content %} + +{% endblock content %} diff --git a/elections/tests.py b/elections/tests.py new file mode 100644 index 0000000..501deb7 --- /dev/null +++ b/elections/tests.py @@ -0,0 +1,16 @@ +""" +This file demonstrates writing tests using the unittest module. These will pass +when you run "manage.py test". + +Replace this with more appropriate tests for your application. +""" + +from django.test import TestCase + + +class SimpleTest(TestCase): + def test_basic_addition(self): + """ + Tests that 1 + 1 always equals 2. + """ + self.assertEqual(1 + 1, 2) diff --git a/elections/urls.py b/elections/urls.py new file mode 100644 index 0000000..b9314ec --- /dev/null +++ b/elections/urls.py @@ -0,0 +1,9 @@ +from django.conf.urls.defaults import patterns, url +from django.views.generic import DetailView, ListView + +from models import Election + +urlpatterns = patterns('', + url(r'^election/(?P\d+)/$', DetailView.as_view(model=Election), name='election_detail'), + url(r'^$', ListView.as_view(model=Election), name='election_list'), +) diff --git a/elections/views.py b/elections/views.py new file mode 100644 index 0000000..60f00ef --- /dev/null +++ b/elections/views.py @@ -0,0 +1 @@ +# Create your views here. diff --git a/requirements.txt b/requirements.txt index b37614c..355a96a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,6 @@ Django==1.3 South==0.7.3 distribute==0.6.19 +django-debug-toolbar==0.8.5 django-grappelli==2.3.5 wsgiref==0.1.2 diff --git a/settings.py b/settings.py index fa89f24..28e4b6f 100644 --- a/settings.py +++ b/settings.py @@ -10,6 +10,8 @@ # ('Your Name', 'your_email@example.com'), ) +INTERNAL_IPS = ('127.0.0.1',) + MANAGERS = ADMINS DATABASES = { @@ -30,7 +32,7 @@ # timezone as the operating system. # If running in a Windows environment this must be set to the same as your # system time zone. -TIME_ZONE = 'America/Chicago' +TIME_ZONE = 'America/Santiago' # Language code for this installation. All choices can be found here: # http://www.i18nguy.com/unicode/language-identifiers.html @@ -68,7 +70,7 @@ # URL prefix for admin static files -- CSS, JavaScript and images. # Make sure to use a trailing slash. # Examples: "http://foo.com/static/admin/", "/static/admin/". -ADMIN_MEDIA_PREFIX = '/static/admin/' +ADMIN_MEDIA_PREFIX = STATIC_URL + "grappelli/" # Additional locations of static files STATICFILES_DIRS = ( @@ -106,6 +108,7 @@ ROOT_URLCONF = 'candidator.urls' TEMPLATE_DIRS = ( + os.path.join(PROJECT_ROOT, 'templates'), # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". # Always use forward slashes, even on Windows. # Don't forget to use absolute paths, not relative paths. @@ -119,9 +122,14 @@ 'django.contrib.messages', 'django.contrib.staticfiles', # Uncomment the next line to enable the admin: - # 'django.contrib.admin', + 'grappelli', + 'django.contrib.admin', # Uncomment the next line to enable admin documentation: - # 'django.contrib.admindocs', + 'django.contrib.admindocs', + 'debug_toolbar', + 'profiles', + 'smart_profile', + 'elections', ) # A sample logging configuration. The only tangible logging @@ -146,3 +154,22 @@ }, } } + +DEBUG_TOOLBAR_PANELS = ( + 'debug_toolbar.panels.version.VersionDebugPanel', + 'debug_toolbar.panels.timer.TimerDebugPanel', + 'debug_toolbar.panels.settings_vars.SettingsVarsDebugPanel', + 'debug_toolbar.panels.headers.HeaderDebugPanel', + 'debug_toolbar.panels.request_vars.RequestVarsDebugPanel', + 'debug_toolbar.panels.template.TemplateDebugPanel', + 'debug_toolbar.panels.sql.SQLDebugPanel', + 'debug_toolbar.panels.signals.SignalDebugPanel', + 'debug_toolbar.panels.logger.LoggingPanel', +) + +DEBUG_TOOLBAR_CONFIG = { + 'INTERCEPT_REDIRECTS': False, + 'HIDE_DJANGO_SQL': False, +} + +AUTH_PROFILE_MODULE = 'smart_profile.Profile' diff --git a/smart_profile/__init__.py b/smart_profile/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smart_profile/admin.py b/smart_profile/admin.py new file mode 100644 index 0000000..4f4e99f --- /dev/null +++ b/smart_profile/admin.py @@ -0,0 +1,4 @@ +from django.contrib import admin +from models import Profile + +admin.site.register(Profile) diff --git a/smart_profile/models.py b/smart_profile/models.py new file mode 100644 index 0000000..b72cdb5 --- /dev/null +++ b/smart_profile/models.py @@ -0,0 +1,22 @@ +from django.db import models +from django.contrib.auth.models import User +from django.db.models.signals import post_save + +# Create your models here. + +class Profile(models.Model): + name = models.CharField(max_length=255) + biography = models.TextField() + + user = models.ForeignKey('auth.User') + + @models.permalink + def get_absolute_url(self): + return ('profiles_profile_detail', (), { 'username': self.user.username }) + + +def create_user_profile(sender, instance, created, **kwargs): + if created: + Profile.objects.create(user=instance) + +post_save.connect(create_user_profile, sender=User) diff --git a/smart_profile/tests.py b/smart_profile/tests.py new file mode 100644 index 0000000..501deb7 --- /dev/null +++ b/smart_profile/tests.py @@ -0,0 +1,16 @@ +""" +This file demonstrates writing tests using the unittest module. These will pass +when you run "manage.py test". + +Replace this with more appropriate tests for your application. +""" + +from django.test import TestCase + + +class SimpleTest(TestCase): + def test_basic_addition(self): + """ + Tests that 1 + 1 always equals 2. + """ + self.assertEqual(1 + 1, 2) diff --git a/smart_profile/views.py b/smart_profile/views.py new file mode 100644 index 0000000..60f00ef --- /dev/null +++ b/smart_profile/views.py @@ -0,0 +1 @@ +# Create your views here. diff --git a/templates/profiles/profile_list.html b/templates/profiles/profile_list.html new file mode 100644 index 0000000..200e64d --- /dev/null +++ b/templates/profiles/profile_list.html @@ -0,0 +1,9 @@ + + + +{% for profile in object_list %} +
  • {{ profile.user.username }}
  • +{% empty %} +
  • No hay usuarios
  • +{% endfor %} + diff --git a/urls.py b/urls.py index 70e56b2..1c04107 100644 --- a/urls.py +++ b/urls.py @@ -1,8 +1,8 @@ from django.conf.urls.defaults import patterns, include, url # Uncomment the next two lines to enable the admin: -# from django.contrib import admin -# admin.autodiscover() +from django.contrib import admin +admin.autodiscover() urlpatterns = patterns('', # Examples: @@ -10,8 +10,13 @@ # url(r'^candidator/', include('candidator.foo.urls')), # Uncomment the admin/doc line below to enable admin documentation: - # url(r'^admin/doc/', include('django.contrib.admindocs.urls')), + url(r'^admin/doc/', include('django.contrib.admindocs.urls')), # Uncomment the next line to enable the admin: - # url(r'^admin/', include(admin.site.urls)), + (r'^grappelli/', include('grappelli.urls')), + url(r'^admin/', include(admin.site.urls)), + + (r'^profiles/', include('profiles.urls')), + + url(r'^elections/', include('elections.urls')), )