rename accounts.models, reset migrations

This commit is contained in:
Guilhem Saurel 2016-06-12 17:11:11 +02:00
parent 478c33bb00
commit 426d91aee3
15 changed files with 76 additions and 217 deletions

View File

@ -1,6 +1,6 @@
from django.contrib import admin from django.contrib import admin
from accounts.models import PonyConfSpeaker, PonyConfUser from accounts.models import Profile, Speaker
admin.site.register(PonyConfUser) admin.site.register(Profile) # FIXME extend user admin
admin.site.register(PonyConfSpeaker) admin.site.register(Speaker)

View File

@ -1,11 +1,11 @@
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.forms.models import modelform_factory 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'])

View File

@ -1,10 +1,12 @@
# -*- coding: utf-8 -*- # -*- 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 from __future__ import unicode_literals
import django.db.models.deletion
from django.conf import settings from django.conf import settings
import django.contrib.sites.managers
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion
import django.db.models.manager
class Migration(migrations.Migration): class Migration(migrations.Migration):
@ -13,15 +15,37 @@ class Migration(migrations.Migration):
dependencies = [ dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL), migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('sites', '0002_alter_domain_unique'),
] ]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='PonyConfUser', name='Profile',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('biography', models.TextField(blank=True, verbose_name='Biography')), ('biography', models.TextField(blank=True, verbose_name='Biography')),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ('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')]),
),
] ]

View File

@ -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')]),
),
]

View File

@ -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),
),
]

View File

@ -5,20 +5,20 @@ from django.contrib.sites.managers import CurrentSiteManager
from django.contrib.sites.models import Site from django.contrib.sites.models import Site
from django.db import models from django.db import models
__all__ = ['PonyConfUser', 'PonyConfSpeaker'] __all__ = ['Profile', 'Speaker']
def enum_to_choices(enum): def enum_to_choices(enum):
return ((item.value, item.name) for item in list(enum)) return ((item.value, item.name) for item in list(enum))
class PonyConfUser(models.Model): class Profile(models.Model):
user = models.OneToOneField(User) user = models.OneToOneField(User)
biography = models.TextField(blank=True, verbose_name='Biography') biography = models.TextField(blank=True, verbose_name='Biography')
class PonyConfSpeaker(models.Model): class Speaker(models.Model):
TRANSPORTS = IntEnum('Transport', 'train plane') TRANSPORTS = IntEnum('Transport', 'train plane')
CONNECTORS = IntEnum('Connector', 'VGA HDMI miniDP') CONNECTORS = IntEnum('Connector', 'VGA HDMI miniDP')
@ -42,8 +42,8 @@ class PonyConfSpeaker(models.Model):
return self.user.get_full_name() or self.user.username 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: 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')

View File

@ -2,7 +2,7 @@ from django.contrib.auth.models import User
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.test import TestCase from django.test import TestCase
from .models import PonyConfUser from .models import Profile
ROOT_URL = 'accounts' ROOT_URL = 'accounts'
@ -14,8 +14,8 @@ class AccountTests(TestCase):
# MODELS # MODELS
def test_create_ponyconfuser(self): def test_create_profile(self):
self.assertEqual(PonyConfUser.objects.count(), 2) self.assertEqual(Profile.objects.count(), 2)
# VIEWS # VIEWS
@ -23,7 +23,7 @@ class AccountTests(TestCase):
# User b wants to update its username, email and biography # User b wants to update its username, email and biography
user = User.objects.get(username='b') user = User.objects.get(username='b')
self.assertEqual(user.email, 'b@example.org') self.assertEqual(user.email, 'b@example.org')
self.assertEqual(user.ponyconfuser.biography, '') self.assertEqual(user.profile.biography, '')
self.client.login(username='b', password='b') self.client.login(username='b', password='b')
@ -35,4 +35,4 @@ class AccountTests(TestCase):
user = User.objects.get(username='z') user = User.objects.get(username='z')
self.assertEqual(user.email, 'b@newdomain.com') self.assertEqual(user.email, 'b@newdomain.com')
self.assertEqual(user.ponyconfuser.biography, 'tester') self.assertEqual(user.profile.biography, 'tester')

View File

@ -2,14 +2,14 @@ from django.contrib import messages
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.shortcuts import render from django.shortcuts import render
from .forms import PonyConfUserForm, ProfileForm from .forms import ProfileForm, UserForm
@login_required @login_required
def profile(request): def profile(request):
forms = [ProfileForm(request.POST or None, instance=request.user), forms = [UserForm(request.POST or None, instance=request.user),
PonyConfUserForm(request.POST or None, instance=request.user.ponyconfuser)] ProfileForm(request.POST or None, instance=request.user.profile)]
if request.method == 'POST': if request.method == 'POST':
if all(form.is_valid() for form in forms): if all(form.is_valid() for form in forms):

View File

@ -1,12 +1,12 @@
# -*- coding: utf-8 -*- # -*- 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 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 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): class Migration(migrations.Migration):
@ -15,7 +15,7 @@ class Migration(migrations.Migration):
dependencies = [ dependencies = [
('sites', '0002_alter_domain_unique'), ('sites', '0002_alter_domain_unique'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('accounts', '0001_initial'),
] ]
operations = [ operations = [
@ -24,9 +24,10 @@ class Migration(migrations.Migration):
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('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')])), ('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={ options={
'ordering': ['order'], 'ordering': ['talk', 'order'],
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
@ -37,7 +38,11 @@ class Migration(migrations.Migration):
('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='title', unique=True)), ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='title', unique=True)),
('description', models.TextField(blank=True, verbose_name='Description')), ('description', models.TextField(blank=True, verbose_name='Description')),
('site', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sites.Site')), ('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( migrations.CreateModel(
@ -45,8 +50,13 @@ class Migration(migrations.Migration):
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('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')), ('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')), ('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( migrations.AddField(
model_name='talk', model_name='talk',
@ -58,13 +68,8 @@ class Migration(migrations.Migration):
name='talk', name='talk',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='proposals.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( migrations.AlterUniqueTogether(
name='speach', name='speach',
unique_together=set([('user', 'talk'), ('order', 'talk')]), unique_together=set([('speaker', 'talk'), ('order', 'talk')]),
), ),
] ]

View File

@ -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,
),
]

View File

@ -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()),
],
),
]

View File

@ -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'),
),
]

View File

@ -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')]),
),
]

View File

@ -2,7 +2,7 @@ from django.contrib.sites.managers import CurrentSiteManager
from django.contrib.sites.models import Site from django.contrib.sites.models import Site
from django.db import models from django.db import models
from accounts.models import PonyConfSpeaker from accounts.models import Speaker
from autoslug import AutoSlugField from autoslug import AutoSlugField
__all__ = ['Topic', 'Talk', 'Speach'] __all__ = ['Topic', 'Talk', 'Speach']
@ -26,7 +26,7 @@ class Talk(models.Model):
site = models.ForeignKey(Site, on_delete=models.CASCADE) 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') title = models.CharField(max_length=128, verbose_name='Title')
slug = AutoSlugField(populate_from='title', unique=True) slug = AutoSlugField(populate_from='title', unique=True)
description = models.TextField(blank=True, verbose_name='Description') 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_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) talk = models.ForeignKey(Talk, on_delete=models.CASCADE)
order = models.IntegerField(choices=SPEAKER_NO) order = models.IntegerField(choices=SPEAKER_NO)

View File

@ -4,7 +4,7 @@ from django.contrib.sites.shortcuts import get_current_site
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.shortcuts import get_object_or_404, redirect, render 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.forms import TalkForm
from proposals.models import Speach, Talk, Topic from proposals.models import Speach, Talk, Topic
@ -15,7 +15,7 @@ def home(request):
@login_required @login_required
def talk_list(request): def talk_list(request):
speaker = PonyConfSpeaker.on_site.filter(user=request.user) speaker = Speaker.on_site.filter(user=request.user)
if speaker.exists(): if speaker.exists():
speaker = speaker.first() speaker = speaker.first()
mine = Talk.on_site.filter(speakers=speaker) mine = Talk.on_site.filter(speakers=speaker)
@ -41,7 +41,7 @@ def talk_list_by_topic(request, topic):
@login_required @login_required
def talk_list_by_speaker(request, speaker): 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) talks = Talk.on_site.filter(speakers=speaker)
return render(request, 'proposals/talk_list.html', { return render(request, 'proposals/talk_list.html', {
'title': 'Talks with %s:' % speaker, 'title': 'Talks with %s:' % speaker,
@ -68,7 +68,7 @@ def talk_edit(request, talk=None):
talk = form.save(commit=False) talk = form.save(commit=False)
talk.site = site talk.site = site
talk.save() 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 = Speach(speaker=speaker, talk=talk, order=1)
speach.save() speach.save()
messages.success(request, 'Talk proposed successfully!') messages.success(request, 'Talk proposed successfully!')
@ -96,7 +96,7 @@ def topic_list(request):
@login_required @login_required
def speaker_list(request): def speaker_list(request):
speakers = PonyConfSpeaker.on_site.all() speakers = Speaker.on_site.all()
return render(request, 'proposals/speaker_list.html', { return render(request, 'proposals/speaker_list.html', {
'speaker': speakers, 'speaker': speakers,
}) })
@ -104,7 +104,7 @@ def speaker_list(request):
@login_required @login_required
def user_details(request, username): 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', { return render(request, 'proposals/user_details.html', {
'user': user, 'user': user,
}) })