diff --git a/wafer/kv/migrations/0001_initial.py b/wafer/kv/migrations/0001_initial.py
index 104b68e0..20740f87 100644
--- a/wafer/kv/migrations/0001_initial.py
+++ b/wafer/kv/migrations/0001_initial.py
@@ -16,10 +16,12 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='KeyValue',
fields=[
- ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('id', models.AutoField(verbose_name='ID', serialize=False,
+ auto_created=True, primary_key=True)),
('key', models.CharField(max_length=64, db_index=True)),
('value', jsonfield.fields.JSONField()),
- ('group', models.ForeignKey(to='auth.Group')),
+ ('group', models.ForeignKey(
+ to='auth.Group', on_delete=models.CASCADE)),
],
),
]
diff --git a/wafer/pages/migrations/0001_initial.py b/wafer/pages/migrations/0001_initial.py
index afe76544..0a2b2d42 100644
--- a/wafer/pages/migrations/0001_initial.py
+++ b/wafer/pages/migrations/0001_initial.py
@@ -34,7 +34,9 @@ class Migration(migrations.Migration):
('exclude_from_static', models.BooleanField(default=False, help_text='Whether to exclude this page from the static version of the site (Container pages, etc.)')),
('_content_rendered', models.TextField(editable=False, blank=True)),
('files', models.ManyToManyField(help_text='Images and other files for use in the content markdown field.', related_name='pages', null=True, to='pages.File', blank=True)),
- ('parent', models.ForeignKey(blank=True, to='pages.Page', null=True)),
+ ('parent', models.ForeignKey(
+ blank=True, to='pages.Page', null=True,
+ on_delete=models.CASCADE)),
],
options={
},
diff --git a/wafer/registration/templatetags/wafer_crispy.py b/wafer/registration/templatetags/wafer_crispy.py
index 80cb4daf..0e15cef9 100644
--- a/wafer/registration/templatetags/wafer_crispy.py
+++ b/wafer/registration/templatetags/wafer_crispy.py
@@ -4,7 +4,7 @@
register = template.Library()
-@register.assignment_tag(takes_context=True)
+@register.simple_tag(takes_context=True)
def wafer_form_helper(context, helper_name):
'''
Find the specified Crispy FormHelper and instantiate it.
diff --git a/wafer/schedule/migrations/0001_initial.py b/wafer/schedule/migrations/0001_initial.py
index 1e7f3860..0af5750e 100644
--- a/wafer/schedule/migrations/0001_initial.py
+++ b/wafer/schedule/migrations/0001_initial.py
@@ -32,7 +32,9 @@ class Migration(migrations.Migration):
('notes', models.TextField(help_text='Notes for the conference organisers', blank=True)),
('css_class', models.CharField(help_text='Custom css class for this schedule item', max_length=128, blank=True)),
('details_html', models.TextField(editable=False)),
- ('page', models.ForeignKey(blank=True, to='pages.Page', null=True)),
+ ('page', models.ForeignKey(
+ blank=True, to='pages.Page', null=True,
+ on_delete=models.CASCADE)),
],
options={
},
@@ -45,8 +47,12 @@ class Migration(migrations.Migration):
('start_time', models.TimeField(help_text='Start time (if no previous slot)', null=True, blank=True)),
('end_time', models.TimeField(help_text='Slot end time', null=True)),
('name', models.CharField(help_text='Identifier for use in the admin panel', max_length=1024, null=True, blank=True)),
- ('day', models.ForeignKey(blank=True, to='schedule.Day', help_text='Day for this slot', null=True)),
- ('previous_slot', models.ForeignKey(blank=True, to='schedule.Slot', help_text='Previous slot', null=True)),
+ ('day', models.ForeignKey(
+ blank=True, to='schedule.Day', null=True,
+ help_text='Day for this slot', on_delete=models.PROTECT)),
+ ('previous_slot', models.ForeignKey(
+ blank=True, to='schedule.Slot', help_text='Previous slot',
+ null=True, on_delete=models.CASCADE)),
],
options={
'ordering': ['end_time', 'start_time'],
@@ -81,13 +87,16 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='scheduleitem',
name='talk',
- field=models.ForeignKey(blank=True, to='talks.Talk', null=True),
+ field=models.ForeignKey(
+ blank=True, to='talks.Talk', null=True,
+ on_delete=models.CASCADE),
preserve_default=True,
),
migrations.AddField(
model_name='scheduleitem',
name='venue',
- field=models.ForeignKey(to='schedule.Venue'),
+ field=models.ForeignKey(
+ to='schedule.Venue', on_delete=models.PROTECT),
preserve_default=True,
),
]
diff --git a/wafer/settings.py b/wafer/settings.py
index c1d7d28e..e22b7045 100644
--- a/wafer/settings.py
+++ b/wafer/settings.py
@@ -121,7 +121,7 @@
]
-MIDDLEWARE_CLASSES = (
+MIDDLEWARE = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
diff --git a/wafer/sponsors/templatetags/sponsors.py b/wafer/sponsors/templatetags/sponsors.py
index e5d53f72..dab55d6f 100644
--- a/wafer/sponsors/templatetags/sponsors.py
+++ b/wafer/sponsors/templatetags/sponsors.py
@@ -13,10 +13,7 @@ def sponsors():
}
-# We use assignment_tag for compatibility with Django 1.8
-# Once we drop 1.8 support, we should change this to
-# simple_tag
-@register.assignment_tag()
+@register.simple_tag()
def sponsor_image_url(sponsor, name):
"""Returns the corresponding url from the sponsors images"""
if sponsor.files.filter(name=name).exists():
diff --git a/wafer/talks/migrations/0001_initial.py b/wafer/talks/migrations/0001_initial.py
index d2bded16..340a03a4 100644
--- a/wafer/talks/migrations/0001_initial.py
+++ b/wafer/talks/migrations/0001_initial.py
@@ -16,14 +16,30 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='Talk',
fields=[
- ('talk_id', models.AutoField(serialize=False, primary_key=True)),
+ ('talk_id', models.AutoField(
+ serialize=False, primary_key=True)),
('title', models.CharField(max_length=1024)),
- ('abstract', markitup.fields.MarkupField(help_text='Write two or three paragraphs describing your talk. Who is your audience? What will they get out of it? What will you cover?
You can use Markdown syntax.', no_rendered_field=True)),
- ('notes', models.TextField(help_text='Any notes for the conference organisers?', null=True, blank=True)),
- ('status', models.CharField(default=b'P', max_length=1, choices=[(b'A', b'Accepted'), (b'R', b'Not Accepted'), (b'P', b'Under Consideration')])),
- ('_abstract_rendered', models.TextField(editable=False, blank=True)),
- ('authors', models.ManyToManyField(related_name='talks', to=settings.AUTH_USER_MODEL)),
- ('corresponding_author', models.ForeignKey(related_name='contact_talks', to=settings.AUTH_USER_MODEL)),
+ ('abstract', markitup.fields.MarkupField(
+ help_text='Write two or three paragraphs describing your '
+ 'talk. Who is your audience? What will they get '
+ 'out of it? What will you cover?
You can '
+ 'use Markdown syntax.',
+ no_rendered_field=True)),
+ ('notes', models.TextField(
+ help_text='Any notes for the conference organisers?',
+ null=True, blank=True)),
+ ('status', models.CharField(
+ default=b'P', max_length=1, choices=[
+ (b'A', b'Accepted'),
+ (b'R', b'Not Accepted'),
+ (b'P', b'Under Consideration')])),
+ ('_abstract_rendered', models.TextField(
+ editable=False, blank=True)),
+ ('authors', models.ManyToManyField(
+ related_name='talks', to=settings.AUTH_USER_MODEL)),
+ ('corresponding_author', models.ForeignKey(
+ related_name='contact_talks', to=settings.AUTH_USER_MODEL,
+ on_delete=models.CASCADE)),
],
options={
},
@@ -32,7 +48,9 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='TalkType',
fields=[
- ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('id', models.AutoField(
+ verbose_name='ID', serialize=False, auto_created=True,
+ primary_key=True)),
('name', models.CharField(max_length=255)),
('description', models.TextField(max_length=1024)),
],
@@ -43,10 +61,13 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='TalkUrl',
fields=[
- ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('id', models.AutoField(
+ verbose_name='ID', serialize=False, auto_created=True,
+ primary_key=True)),
('description', models.CharField(max_length=256)),
('url', models.URLField()),
- ('talk', models.ForeignKey(to='talks.Talk')),
+ ('talk', models.ForeignKey(to='talks.Talk',
+ on_delete=models.CASCADE)),
],
options={
},
@@ -55,7 +76,8 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='talk',
name='talk_type',
- field=models.ForeignKey(to='talks.TalkType', null=True),
+ field=models.ForeignKey(to='talks.TalkType', null=True,
+ on_delete=models.SET_NULL),
preserve_default=True,
),
]
diff --git a/wafer/talks/migrations/0006_author_helptext.py b/wafer/talks/migrations/0006_author_helptext.py
index 4fc8b4cf..9237dd02 100644
--- a/wafer/talks/migrations/0006_author_helptext.py
+++ b/wafer/talks/migrations/0006_author_helptext.py
@@ -15,11 +15,17 @@ class Migration(migrations.Migration):
migrations.AlterField(
model_name='talk',
name='authors',
- field=models.ManyToManyField(help_text='The speakers presenting the talk.', related_name='talks', to=settings.AUTH_USER_MODEL),
+ field=models.ManyToManyField(
+ help_text='The speakers presenting the talk.',
+ related_name='talks', to=settings.AUTH_USER_MODEL),
),
migrations.AlterField(
model_name='talk',
name='corresponding_author',
- field=models.ForeignKey(related_name='contact_talks', to=settings.AUTH_USER_MODEL, help_text='The person submitting the talk (and who questions regarding the talk should be addressed to).'),
+ field=models.ForeignKey(
+ related_name='contact_talks', to=settings.AUTH_USER_MODEL,
+ help_text='The person submitting the talk (and who questions '
+ 'regarding the talk should be addressed to).',
+ on_delete=models.CASCADE),
),
]
diff --git a/wafer/talks/migrations/0012_add_tracks.py b/wafer/talks/migrations/0012_add_tracks.py
index 6c8d6b2e..bd9ef3d0 100644
--- a/wafer/talks/migrations/0012_add_tracks.py
+++ b/wafer/talks/migrations/0012_add_tracks.py
@@ -28,7 +28,8 @@ class Migration(migrations.Migration):
model_name='talk',
name='track',
field=models.ForeignKey(null=True, blank=True, default=None,
- to='talks.Track'),
+ to='talks.Track',
+ on_delete=models.SET_NULL),
preserve_default=False,
),
]
diff --git a/wafer/tickets/migrations/0001_initial.py b/wafer/tickets/migrations/0001_initial.py
index 2b3569c5..a4640256 100644
--- a/wafer/tickets/migrations/0001_initial.py
+++ b/wafer/tickets/migrations/0001_initial.py
@@ -36,7 +36,8 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='ticket',
name='type',
- field=models.ForeignKey(to='tickets.TicketType'),
+ field=models.ForeignKey(
+ to='tickets.TicketType', on_delete=models.CASCADE),
preserve_default=True,
),
migrations.AddField(
diff --git a/wafer/urls.py b/wafer/urls.py
index f16a33f1..078988b0 100644
--- a/wafer/urls.py
+++ b/wafer/urls.py
@@ -11,7 +11,7 @@
url(r'^talks/', include('wafer.talks.urls')),
url(r'^sponsors/', include('wafer.sponsors.urls')),
url(r'^pages/', include('wafer.pages.urls')),
- url(r'^admin/', include(admin.site.urls)),
+ url(r'^admin/', admin.site.urls),
url(r'^markitup/', include('markitup.urls')),
url(r'^schedule/', include('wafer.schedule.urls')),
url(r'^tickets/', include('wafer.tickets.urls')),
diff --git a/wafer/users/migrations/0001_initial.py b/wafer/users/migrations/0001_initial.py
index bc385537..8ed897bd 100644
--- a/wafer/users/migrations/0001_initial.py
+++ b/wafer/users/migrations/0001_initial.py
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
+import django.core.validators
from django.db import models, migrations
from django.conf import settings
@@ -15,13 +16,25 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='UserProfile',
fields=[
- ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
- ('contact_number', models.CharField(max_length=16, null=True, blank=True)),
+ ('id', models.AutoField(
+ verbose_name='ID', serialize=False, auto_created=True,
+ primary_key=True)),
+ ('contact_number', models.CharField(
+ max_length=16, null=True, blank=True)),
('bio', models.TextField(null=True, blank=True)),
- ('homepage', models.CharField(max_length=256, null=True, blank=True)),
- ('twitter_handle', models.CharField(max_length=15, null=True, blank=True)),
- ('github_username', models.CharField(max_length=32, null=True, blank=True)),
- ('user', models.OneToOneField(to=settings.AUTH_USER_MODEL)),
+ ('homepage', models.CharField(
+ max_length=256, null=True, blank=True)),
+ ('twitter_handle', models.CharField(
+ max_length=15, null=True, blank=True,
+ validators=[
+ django.core.validators.RegexValidator(
+ '^[A-Za-z0-9_]{1,15}$',
+ 'Incorrectly formatted twitter handle')
+ ])),
+ ('github_username', models.CharField(
+ max_length=32, null=True, blank=True)),
+ ('user', models.OneToOneField(
+ to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
],
options={
},
diff --git a/wafer/users/models.py b/wafer/users/models.py
index 5dc4d9c7..090506e1 100644
--- a/wafer/users/models.py
+++ b/wafer/users/models.py
@@ -32,7 +32,7 @@ class UserProfile(models.Model):
class Meta:
ordering = ['id']
- user = models.OneToOneField(User)
+ user = models.OneToOneField(User, on_delete=models.CASCADE)
kv = models.ManyToManyField(KeyValue)
contact_number = models.CharField(max_length=16, null=True, blank=True)
bio = models.TextField(null=True, blank=True)