From 4e355aa472b8205b6e42afcdbf2b39db4a50af0e Mon Sep 17 00:00:00 2001 From: "Eduardo Enriqez (eduzen)" Date: Sun, 29 Apr 2018 17:41:57 -0300 Subject: [PATCH 1/2] added autoslug fields to events --- events/forms.py | 1 + events/migrations/0004_auto_20180429_1546.py | 20 ++++++++++++++++++++ events/models.py | 5 +++++ events/tests/test_views.py | 8 ++++++++ events/urls.py | 4 ++++ 5 files changed, 38 insertions(+) create mode 100644 events/migrations/0004_auto_20180429_1546.py diff --git a/events/forms.py b/events/forms.py index 18338eb6..0aa4cbd4 100644 --- a/events/forms.py +++ b/events/forms.py @@ -59,6 +59,7 @@ class Meta: 'description', 'place', 'address', + 'slug', 'url', 'start_at', 'end_at', diff --git a/events/migrations/0004_auto_20180429_1546.py b/events/migrations/0004_auto_20180429_1546.py new file mode 100644 index 00000000..a78281aa --- /dev/null +++ b/events/migrations/0004_auto_20180429_1546.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import autoslug.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0003_eventparticipation_gender'), + ] + + operations = [ + migrations.AddField( + model_name='event', + name='slug', + field=autoslug.fields.AutoSlugField(populate_from='name', editable=True, unique=True, blank=True, null=True, verbose_name='Url'), + ), + ] diff --git a/events/models.py b/events/models.py index 2bbe26de..00834403 100644 --- a/events/models.py +++ b/events/models.py @@ -7,6 +7,8 @@ from django.core.urlresolvers import reverse from email_confirm_la.models import EmailConfirmation +from autoslug import AutoSlugField + from jobs.models import JOB_SENIORITIES @@ -25,6 +27,9 @@ class Event(models.Model): description = models.TextField(verbose_name=_('Descripcion')) place = models.CharField(max_length=100, verbose_name=_('Lugar')) address = models.CharField(max_length=100, verbose_name=_('Direccion')) + slug = AutoSlugField( + editable=True, null=True, blank=True, unique=True, populate_from='name', + ) url = models.URLField(blank=True, null=True) start_at = models.DateTimeField(verbose_name=_('Comienza a las')) end_at = models.DateTimeField(verbose_name=_('Termina a las')) diff --git a/events/tests/test_views.py b/events/tests/test_views.py index 403286a6..62a3f445 100644 --- a/events/tests/test_views.py +++ b/events/tests/test_views.py @@ -26,6 +26,11 @@ def test_events_feed_view_list(self): self.assertEqual(response.status_code, 200) self.assertContains(response, event.name) + def test_events_view_slug(self): + event = EventFactory() + response_por_slug = self.client.get('/eventos/{}/'.format(event.slug)) + self.assertEqual(response_por_slug.context['event'].id, event.id) + def test_events_view_create(self): response = self.client.get(reverse('events:add')) event = { @@ -33,6 +38,7 @@ def test_events_view_create(self): 'description': "Charlas y talleres", 'place': 'UTN Regional, San Rafael', 'address': 'Gral. Paz 1432', + 'slug': 'slug', 'url': 'pydaysanrafael.tk', 'start_at': (now() + timedelta(days=1)).strftime('%d/%m/%Y 08:00:00'), 'end_at': (now() + timedelta(days=1)).strftime('%d/%m/%Y 18:00:00'), @@ -54,6 +60,7 @@ def test_events_view_edit(self): 'description': event.description, 'place': event.place, 'address': event.address, + 'slug': 'some-slug', 'url': "http://rioiv.python.org.ar", 'start_at': (now() + timedelta(days=1)).strftime('%d/%m/%Y 08:00:00'), 'end_at': (now() + timedelta(days=1)).strftime('%d/%m/%Y 18:00:00'), @@ -74,6 +81,7 @@ def test_html_sanitizer_in_description_field(self): 'description': 'an example', 'place': 'UTN Regional, San Rafael', 'address': 'Gral. Paz 1432', + 'slug': 'slug', 'url': 'pydaysanrafael.tk', 'start_at': (now() + timedelta(days=1)).strftime('%d/%m/%Y 08:00:00'), 'end_at': (now() + timedelta(days=1)).strftime('%d/%m/%Y 18:00:00'), diff --git a/events/urls.py b/events/urls.py index 9fde8e27..f24e1aa8 100644 --- a/events/urls.py +++ b/events/urls.py @@ -1,6 +1,9 @@ # -*- coding: utf-8 -*- from django.conf.urls import patterns, url +from django.views.generic.detail import DetailView + +from .models import Event from .views import (EventDetail, EventList, EventCreate, @@ -18,6 +21,7 @@ url(r'^$', EventList.as_view(), name='events_list_all'), url(r'^rss$', EventsFeed(), name='events_feed'), url(r'^(?P\d+)/$', EventDetail.as_view(), name='detail'), + url(r'^(?P[\w-]+)/$', DetailView.as_view(model=Event), name='event_slug'), url(r'^add/$', EventCreate.as_view(), name='add'), url(r'^(?P\d+)/editar/$', EventUpdate.as_view(), name='edit'), url(r'^(?P\d+)/borrar/$', EventDelete.as_view(), name='delete'), From b8b00cbe9f330118e520d0a9e9b4c4db9520685d Mon Sep 17 00:00:00 2001 From: "Eduardo Enriqez (eduzen)" Date: Sun, 29 Apr 2018 17:57:35 -0300 Subject: [PATCH 2/2] fixed url position --- events/tests/test_views.py | 13 +++++-------- events/urls.py | 2 +- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/events/tests/test_views.py b/events/tests/test_views.py index 62a3f445..9f03b4cb 100644 --- a/events/tests/test_views.py +++ b/events/tests/test_views.py @@ -26,11 +26,6 @@ def test_events_feed_view_list(self): self.assertEqual(response.status_code, 200) self.assertContains(response, event.name) - def test_events_view_slug(self): - event = EventFactory() - response_por_slug = self.client.get('/eventos/{}/'.format(event.slug)) - self.assertEqual(response_por_slug.context['event'].id, event.id) - def test_events_view_create(self): response = self.client.get(reverse('events:add')) event = { @@ -38,7 +33,6 @@ def test_events_view_create(self): 'description': "Charlas y talleres", 'place': 'UTN Regional, San Rafael', 'address': 'Gral. Paz 1432', - 'slug': 'slug', 'url': 'pydaysanrafael.tk', 'start_at': (now() + timedelta(days=1)).strftime('%d/%m/%Y 08:00:00'), 'end_at': (now() + timedelta(days=1)).strftime('%d/%m/%Y 18:00:00'), @@ -60,7 +54,6 @@ def test_events_view_edit(self): 'description': event.description, 'place': event.place, 'address': event.address, - 'slug': 'some-slug', 'url': "http://rioiv.python.org.ar", 'start_at': (now() + timedelta(days=1)).strftime('%d/%m/%Y 08:00:00'), 'end_at': (now() + timedelta(days=1)).strftime('%d/%m/%Y 18:00:00'), @@ -81,7 +74,6 @@ def test_html_sanitizer_in_description_field(self): 'description': 'an example', 'place': 'UTN Regional, San Rafael', 'address': 'Gral. Paz 1432', - 'slug': 'slug', 'url': 'pydaysanrafael.tk', 'start_at': (now() + timedelta(days=1)).strftime('%d/%m/%Y 08:00:00'), 'end_at': (now() + timedelta(days=1)).strftime('%d/%m/%Y 18:00:00'), @@ -103,3 +95,8 @@ def test_events_view_delete(self): response = self.client.post(reverse('events:delete', args=(event.pk, ))) self.assertEqual(response.status_code, 302) self.assertFalse(Event.objects.filter(name=event.name).exists()) + + def test_events_view_slug(self): + event = EventFactory() + response_por_slug = self.client.get('/eventos/{}/'.format(event.slug)) + self.assertEqual(response_por_slug.context['event'].id, event.id) diff --git a/events/urls.py b/events/urls.py index f24e1aa8..c5dffa10 100644 --- a/events/urls.py +++ b/events/urls.py @@ -21,10 +21,10 @@ url(r'^$', EventList.as_view(), name='events_list_all'), url(r'^rss$', EventsFeed(), name='events_feed'), url(r'^(?P\d+)/$', EventDetail.as_view(), name='detail'), - url(r'^(?P[\w-]+)/$', DetailView.as_view(model=Event), name='event_slug'), url(r'^add/$', EventCreate.as_view(), name='add'), url(r'^(?P\d+)/editar/$', EventUpdate.as_view(), name='edit'), url(r'^(?P\d+)/borrar/$', EventDelete.as_view(), name='delete'), + url(r'^(?P[\w-]+)/$', DetailView.as_view(model=Event), name='event_slug'), # Event Registration Management url(r'^(?P\d+)/inscribirse/$', EventParticipationCreate.as_view(), name='register'),