diff --git a/accounts/admin.py b/accounts/admin.py index f5f0fb5..b6cb776 100644 --- a/accounts/admin.py +++ b/accounts/admin.py @@ -1,6 +1,6 @@ from django.contrib import admin -from accounts.models import PonyConfSpeaker, PonyConfUser +from accounts.models import Profile, Speaker -admin.site.register(PonyConfUser) -admin.site.register(PonyConfSpeaker) +admin.site.register(Profile) # FIXME extend user admin +admin.site.register(Speaker) diff --git a/accounts/forms.py b/accounts/forms.py index e187303..0181566 100644 --- a/accounts/forms.py +++ b/accounts/forms.py @@ -1,11 +1,11 @@ from django.contrib.auth.models import User from django.forms.models import modelform_factory -from .models import PonyConfUser +from .models import Profile -__all__ = ['ProfileForm', 'PonyConfUserForm'] +__all__ = ['UserForm', 'ProfileForm'] -ProfileForm = modelform_factory(User, fields=['first_name', 'last_name', 'email', 'username']) +UserForm = modelform_factory(User, fields=['first_name', 'last_name', 'email', 'username']) -PonyConfUserForm = modelform_factory(PonyConfUser, fields=['biography']) +ProfileForm = modelform_factory(Profile, fields=['biography']) diff --git a/accounts/migrations/0001_initial.py b/accounts/migrations/0001_initial.py index 86b0130..37b9946 100644 --- a/accounts/migrations/0001_initial.py +++ b/accounts/migrations/0001_initial.py @@ -1,10 +1,12 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-06-11 12:23 +# Generated by Django 1.9.7 on 2016-06-12 15:10 from __future__ import unicode_literals -import django.db.models.deletion from django.conf import settings +import django.contrib.sites.managers from django.db import migrations, models +import django.db.models.deletion +import django.db.models.manager class Migration(migrations.Migration): @@ -13,15 +15,37 @@ class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('sites', '0002_alter_domain_unique'), ] operations = [ migrations.CreateModel( - name='PonyConfUser', + name='Profile', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('biography', models.TextField(blank=True, verbose_name='Biography')), ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), + migrations.CreateModel( + name='Speaker', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('arrival', models.DateTimeField(blank=True, null=True)), + ('departure', models.DateTimeField(blank=True, null=True)), + ('transport', models.IntegerField(blank=True, choices=[(1, 'train'), (2, 'plane')], null=True)), + ('connector', models.IntegerField(blank=True, choices=[(1, 'VGA'), (2, 'HDMI'), (3, 'miniDP')], null=True)), + ('constraints', models.TextField()), + ('site', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sites.Site')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + managers=[ + ('objects', django.db.models.manager.Manager()), + ('on_site', django.contrib.sites.managers.CurrentSiteManager()), + ], + ), + migrations.AlterUniqueTogether( + name='speaker', + unique_together=set([('site', 'user')]), + ), ] diff --git a/accounts/migrations/0002_auto_20160611_1305.py b/accounts/migrations/0002_auto_20160611_1305.py deleted file mode 100644 index 62d3317..0000000 --- a/accounts/migrations/0002_auto_20160611_1305.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-06-11 13:05 -from __future__ import unicode_literals - -import django.contrib.sites.managers -import django.db.models.deletion -import django.db.models.manager -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('sites', '0002_alter_domain_unique'), - ('accounts', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='PonyConfSpeaker', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('arrival', models.DateTimeField(blank=True, null=True)), - ('departure', models.DateTimeField(blank=True, null=True)), - ('transport', models.IntegerField(blank=True, choices=[(1, 'train'), (2, 'plane')], null=True)), - ('connector', models.IntegerField(blank=True, choices=[(1, 'VGA'), (2, 'HDMI'), (3, 'miniDP')], null=True)), - ('constraints', models.TextField()), - ('site', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sites.Site')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='accounts.PonyConfUser')), - ], - managers=[ - ('objects', django.db.models.manager.Manager()), - ('on_site', django.contrib.sites.managers.CurrentSiteManager()), - ], - ), - migrations.AlterUniqueTogether( - name='ponyconfspeaker', - unique_together=set([('site', 'user')]), - ), - ] diff --git a/accounts/migrations/0003_auto_20160612_1421.py b/accounts/migrations/0003_auto_20160612_1421.py deleted file mode 100644 index dd027ae..0000000 --- a/accounts/migrations/0003_auto_20160612_1421.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-06-12 14:21 -from __future__ import unicode_literals - -import django.db.models.deletion -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('accounts', '0002_auto_20160611_1305'), - ] - - operations = [ - migrations.AlterField( - model_name='ponyconfspeaker', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/accounts/models.py b/accounts/models.py index b137d31..29c9598 100644 --- a/accounts/models.py +++ b/accounts/models.py @@ -5,20 +5,20 @@ from django.contrib.sites.managers import CurrentSiteManager from django.contrib.sites.models import Site from django.db import models -__all__ = ['PonyConfUser', 'PonyConfSpeaker'] +__all__ = ['Profile', 'Speaker'] def enum_to_choices(enum): return ((item.value, item.name) for item in list(enum)) -class PonyConfUser(models.Model): +class Profile(models.Model): user = models.OneToOneField(User) biography = models.TextField(blank=True, verbose_name='Biography') -class PonyConfSpeaker(models.Model): +class Speaker(models.Model): TRANSPORTS = IntEnum('Transport', 'train plane') CONNECTORS = IntEnum('Connector', 'VGA HDMI miniDP') @@ -42,8 +42,8 @@ class PonyConfSpeaker(models.Model): return self.user.get_full_name() or self.user.username -def create_ponyconfuser(sender, instance, created, **kwargs): +def create_profile(sender, instance, created, **kwargs): if created: - PonyConfUser.objects.create(user=instance) + Profile.objects.create(user=instance) -models.signals.post_save.connect(create_ponyconfuser, sender=User, weak=False, dispatch_uid='create_ponyconfuser') +models.signals.post_save.connect(create_profile, sender=User, weak=False, dispatch_uid='create_profile') diff --git a/accounts/tests.py b/accounts/tests.py index 8c71bc8..526e930 100644 --- a/accounts/tests.py +++ b/accounts/tests.py @@ -2,7 +2,7 @@ from django.contrib.auth.models import User from django.core.urlresolvers import reverse from django.test import TestCase -from .models import PonyConfUser +from .models import Profile ROOT_URL = 'accounts' @@ -14,8 +14,8 @@ class AccountTests(TestCase): # MODELS - def test_create_ponyconfuser(self): - self.assertEqual(PonyConfUser.objects.count(), 2) + def test_create_profile(self): + self.assertEqual(Profile.objects.count(), 2) # VIEWS @@ -23,7 +23,7 @@ class AccountTests(TestCase): # User b wants to update its username, email and biography user = User.objects.get(username='b') self.assertEqual(user.email, 'b@example.org') - self.assertEqual(user.ponyconfuser.biography, '') + self.assertEqual(user.profile.biography, '') self.client.login(username='b', password='b') @@ -35,4 +35,4 @@ class AccountTests(TestCase): user = User.objects.get(username='z') self.assertEqual(user.email, 'b@newdomain.com') - self.assertEqual(user.ponyconfuser.biography, 'tester') + self.assertEqual(user.profile.biography, 'tester') diff --git a/accounts/views.py b/accounts/views.py index ee114f5..6fc8280 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -2,14 +2,14 @@ from django.contrib import messages from django.contrib.auth.decorators import login_required from django.shortcuts import render -from .forms import PonyConfUserForm, ProfileForm +from .forms import ProfileForm, UserForm @login_required def profile(request): - forms = [ProfileForm(request.POST or None, instance=request.user), - PonyConfUserForm(request.POST or None, instance=request.user.ponyconfuser)] + forms = [UserForm(request.POST or None, instance=request.user), + ProfileForm(request.POST or None, instance=request.user.profile)] if request.method == 'POST': if all(form.is_valid() for form in forms): diff --git a/proposals/migrations/0001_initial.py b/proposals/migrations/0001_initial.py index 70b3d3a..facebe5 100644 --- a/proposals/migrations/0001_initial.py +++ b/proposals/migrations/0001_initial.py @@ -1,12 +1,12 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9.6 on 2016-06-02 21:26 +# Generated by Django 1.9.7 on 2016-06-12 15:10 from __future__ import unicode_literals -import django.db.models.deletion -from django.conf import settings -from django.db import migrations, models - import autoslug.fields +import django.contrib.sites.managers +from django.db import migrations, models +import django.db.models.deletion +import django.db.models.manager class Migration(migrations.Migration): @@ -15,7 +15,7 @@ class Migration(migrations.Migration): dependencies = [ ('sites', '0002_alter_domain_unique'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('accounts', '0001_initial'), ] operations = [ @@ -24,9 +24,10 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('order', models.IntegerField(choices=[(1, '1'), (2, '2'), (3, '3'), (4, '4'), (5, '5'), (6, '6'), (7, '7')])), + ('speaker', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='accounts.Speaker')), ], options={ - 'ordering': ['order'], + 'ordering': ['talk', 'order'], }, ), migrations.CreateModel( @@ -37,7 +38,11 @@ class Migration(migrations.Migration): ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='title', unique=True)), ('description', models.TextField(blank=True, verbose_name='Description')), ('site', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sites.Site')), - ('speakers', models.ManyToManyField(through='proposals.Speach', to=settings.AUTH_USER_MODEL)), + ('speakers', models.ManyToManyField(through='proposals.Speach', to='accounts.Speaker')), + ], + managers=[ + ('objects', django.db.models.manager.Manager()), + ('on_site', django.contrib.sites.managers.CurrentSiteManager()), ], ), migrations.CreateModel( @@ -45,8 +50,13 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=128, unique=True, verbose_name='Name')), + ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name', unique=True)), ('site', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sites.Site')), ], + managers=[ + ('objects', django.db.models.manager.Manager()), + ('on_site', django.contrib.sites.managers.CurrentSiteManager()), + ], ), migrations.AddField( model_name='talk', @@ -58,13 +68,8 @@ class Migration(migrations.Migration): name='talk', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='proposals.Talk'), ), - migrations.AddField( - model_name='speach', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), - ), migrations.AlterUniqueTogether( name='speach', - unique_together=set([('user', 'talk'), ('order', 'talk')]), + unique_together=set([('speaker', 'talk'), ('order', 'talk')]), ), ] diff --git a/proposals/migrations/0002_topic_slug.py b/proposals/migrations/0002_topic_slug.py deleted file mode 100644 index 4ab5c96..0000000 --- a/proposals/migrations/0002_topic_slug.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.6 on 2016-06-02 21:52 -from __future__ import unicode_literals - -from django.db import migrations - -import autoslug.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('proposals', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='topic', - name='slug', - field=autoslug.fields.AutoSlugField(default='dudule', editable=False, populate_from='name', unique=True), - preserve_default=False, - ), - ] diff --git a/proposals/migrations/0003_auto_20160608_2002.py b/proposals/migrations/0003_auto_20160608_2002.py deleted file mode 100644 index b6eea94..0000000 --- a/proposals/migrations/0003_auto_20160608_2002.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.6 on 2016-06-08 20:02 -from __future__ import unicode_literals - -import django.contrib.sites.managers -import django.db.models.manager -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('proposals', '0002_topic_slug'), - ] - - operations = [ - migrations.AlterModelManagers( - name='talk', - managers=[ - ('objects', django.db.models.manager.Manager()), - ('on_site', django.contrib.sites.managers.CurrentSiteManager()), - ], - ), - migrations.AlterModelManagers( - name='topic', - managers=[ - ('objects', django.db.models.manager.Manager()), - ('on_site', django.contrib.sites.managers.CurrentSiteManager()), - ], - ), - ] diff --git a/proposals/migrations/0004_auto_20160611_1305.py b/proposals/migrations/0004_auto_20160611_1305.py deleted file mode 100644 index 51b20cb..0000000 --- a/proposals/migrations/0004_auto_20160611_1305.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-06-11 13:05 -from __future__ import unicode_literals - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('proposals', '0003_auto_20160608_2002'), - ] - - operations = [ - migrations.AlterModelOptions( - name='speach', - options={'ordering': ['talk', 'order']}, - ), - migrations.AlterField( - model_name='speach', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='accounts.PonyConfSpeaker'), - ), - migrations.AlterField( - model_name='talk', - name='speakers', - field=models.ManyToManyField(through='proposals.Speach', to='accounts.PonyConfSpeaker'), - ), - ] diff --git a/proposals/migrations/0005_auto_20160612_1421.py b/proposals/migrations/0005_auto_20160612_1421.py deleted file mode 100644 index 24858f6..0000000 --- a/proposals/migrations/0005_auto_20160612_1421.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-06-12 14:21 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('proposals', '0004_auto_20160611_1305'), - ] - - operations = [ - migrations.RenameField( - model_name='speach', - old_name='user', - new_name='speaker', - ), - migrations.AlterUniqueTogether( - name='speach', - unique_together=set([('speaker', 'talk'), ('order', 'talk')]), - ), - ] diff --git a/proposals/models.py b/proposals/models.py index af7490e..f8b9897 100644 --- a/proposals/models.py +++ b/proposals/models.py @@ -2,7 +2,7 @@ from django.contrib.sites.managers import CurrentSiteManager from django.contrib.sites.models import Site from django.db import models -from accounts.models import PonyConfSpeaker +from accounts.models import Speaker from autoslug import AutoSlugField __all__ = ['Topic', 'Talk', 'Speach'] @@ -26,7 +26,7 @@ class Talk(models.Model): site = models.ForeignKey(Site, on_delete=models.CASCADE) - speakers = models.ManyToManyField(PonyConfSpeaker, through='Speach') + speakers = models.ManyToManyField(Speaker, through='Speach') title = models.CharField(max_length=128, verbose_name='Title') slug = AutoSlugField(populate_from='title', unique=True) description = models.TextField(blank=True, verbose_name='Description') @@ -43,7 +43,7 @@ class Speach(models.Model): SPEAKER_NO = tuple((i, str(i)) for i in range(1, 8)) - speaker = models.ForeignKey(PonyConfSpeaker, on_delete=models.CASCADE) + speaker = models.ForeignKey(Speaker, on_delete=models.CASCADE) talk = models.ForeignKey(Talk, on_delete=models.CASCADE) order = models.IntegerField(choices=SPEAKER_NO) diff --git a/proposals/views.py b/proposals/views.py index f053963..72d125a 100644 --- a/proposals/views.py +++ b/proposals/views.py @@ -4,7 +4,7 @@ from django.contrib.sites.shortcuts import get_current_site from django.core.exceptions import PermissionDenied from django.shortcuts import get_object_or_404, redirect, render -from accounts.models import PonyConfSpeaker, PonyConfUser +from accounts.models import Speaker, Profile from proposals.forms import TalkForm from proposals.models import Speach, Talk, Topic @@ -15,7 +15,7 @@ def home(request): @login_required def talk_list(request): - speaker = PonyConfSpeaker.on_site.filter(user=request.user) + speaker = Speaker.on_site.filter(user=request.user) if speaker.exists(): speaker = speaker.first() mine = Talk.on_site.filter(speakers=speaker) @@ -41,7 +41,7 @@ def talk_list_by_topic(request, topic): @login_required def talk_list_by_speaker(request, speaker): - speaker = get_object_or_404(PonyConfSpeaker, user__username=speaker) + speaker = get_object_or_404(Speaker, user__username=speaker) talks = Talk.on_site.filter(speakers=speaker) return render(request, 'proposals/talk_list.html', { 'title': 'Talks with %s:' % speaker, @@ -68,7 +68,7 @@ def talk_edit(request, talk=None): talk = form.save(commit=False) talk.site = site talk.save() - speaker = PonyConfSpeaker.on_site.get_or_create(user=request.user, site=site)[0] + speaker = Speaker.on_site.get_or_create(user=request.user, site=site)[0] speach = Speach(speaker=speaker, talk=talk, order=1) speach.save() messages.success(request, 'Talk proposed successfully!') @@ -96,7 +96,7 @@ def topic_list(request): @login_required def speaker_list(request): - speakers = PonyConfSpeaker.on_site.all() + speakers = Speaker.on_site.all() return render(request, 'proposals/speaker_list.html', { 'speaker': speakers, }) @@ -104,7 +104,7 @@ def speaker_list(request): @login_required def user_details(request, username): - user = get_object_or_404(PonyConfUser, user__username=username) + user = get_object_or_404(Profile, user__username=username) return render(request, 'proposals/user_details.html', { 'user': user, })