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)