Speach -> User; and proposals.views clean
This commit is contained in:
parent
336fd90275
commit
4ba9852c5a
|
@ -1,8 +1,9 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Generated by Django 1.9.7 on 2016-06-12 15:10
|
# Generated by Django 1.9.7 on 2016-06-12 16:42
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import autoslug.fields
|
import autoslug.fields
|
||||||
|
from django.conf import settings
|
||||||
import django.contrib.sites.managers
|
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.deletion
|
||||||
|
@ -15,7 +16,7 @@ class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('sites', '0002_alter_domain_unique'),
|
('sites', '0002_alter_domain_unique'),
|
||||||
('accounts', '0001_initial'),
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
]
|
]
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
|
@ -23,8 +24,8 @@ class Migration(migrations.Migration):
|
||||||
name='Speach',
|
name='Speach',
|
||||||
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')], default=1)),
|
||||||
('speaker', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='accounts.Speaker')),
|
('speaker', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ['talk', 'order'],
|
'ordering': ['talk', 'order'],
|
||||||
|
@ -38,7 +39,7 @@ 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='accounts.Speaker')),
|
('speakers', models.ManyToManyField(through='proposals.Speach', to=settings.AUTH_USER_MODEL)),
|
||||||
],
|
],
|
||||||
managers=[
|
managers=[
|
||||||
('objects', django.db.models.manager.Manager()),
|
('objects', django.db.models.manager.Manager()),
|
||||||
|
@ -51,11 +52,6 @@ class Migration(migrations.Migration):
|
||||||
('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)),
|
('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(
|
migrations.AddField(
|
||||||
|
@ -70,6 +66,6 @@ class Migration(migrations.Migration):
|
||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='speach',
|
name='speach',
|
||||||
unique_together=set([('speaker', 'talk'), ('order', 'talk')]),
|
unique_together=set([('order', 'talk'), ('speaker', 'talk')]),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
from django.contrib.auth.models import User
|
||||||
from django.contrib.sites.managers import CurrentSiteManager
|
from django.contrib.sites.managers import CurrentSiteManager
|
||||||
from django.contrib.sites.models import Site
|
from django.contrib.sites.models import Site
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
|
@ -5,8 +6,6 @@ from django.db import models
|
||||||
|
|
||||||
from autoslug import AutoSlugField
|
from autoslug import AutoSlugField
|
||||||
|
|
||||||
from accounts.models import Speaker
|
|
||||||
|
|
||||||
__all__ = ['Topic', 'Talk', 'Speach']
|
__all__ = ['Topic', 'Talk', 'Speach']
|
||||||
|
|
||||||
|
|
||||||
|
@ -26,7 +25,7 @@ class Talk(models.Model):
|
||||||
|
|
||||||
site = models.ForeignKey(Site, on_delete=models.CASCADE)
|
site = models.ForeignKey(Site, on_delete=models.CASCADE)
|
||||||
|
|
||||||
speakers = models.ManyToManyField(Speaker, through='Speach')
|
speakers = models.ManyToManyField(User, 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')
|
||||||
|
@ -46,7 +45,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(Speaker, on_delete=models.CASCADE)
|
speaker = models.ForeignKey(User, 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, default=1)
|
order = models.IntegerField(choices=SPEAKER_NO, default=1)
|
||||||
|
|
||||||
|
@ -64,4 +63,4 @@ class Speach(models.Model):
|
||||||
return self.talk.get_absolute_url()
|
return self.talk.get_absolute_url()
|
||||||
|
|
||||||
def username(self):
|
def username(self):
|
||||||
return self.speaker.user.username
|
return self.speaker.username
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
{% for speaker in talk.speakers.all %}
|
{% for speaker in talk.speakers.all %}
|
||||||
<li><a href="{% url 'show-user' speaker.user.username %}">{{ speaker }}</a></li>
|
<li><a href="{% url 'show-user' speaker.username %}">{{ speaker }}</a></li>
|
||||||
{% empty %}
|
{% empty %}
|
||||||
<li><i>No speaker.</i></li>
|
<li><i>No speaker.</i></li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
|
from django.contrib.auth.models import User
|
||||||
from django.contrib.sites.shortcuts import get_current_site
|
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 django.views.generic import DetailView, ListView
|
from django.views.generic import DetailView, ListView
|
||||||
|
|
||||||
from accounts.models import Profile, Speaker
|
from accounts.models import Speaker
|
||||||
from proposals.forms import TalkForm
|
from proposals.forms import TalkForm
|
||||||
from proposals.models import Speach, Talk, Topic
|
from proposals.models import Speach, Talk, Topic
|
||||||
|
|
||||||
|
@ -18,8 +19,8 @@ def home(request):
|
||||||
@login_required
|
@login_required
|
||||||
def talk_list(request):
|
def talk_list(request):
|
||||||
return render(request, 'proposals/talks.html', {
|
return render(request, 'proposals/talks.html', {
|
||||||
'my_talks': Talk.on_site.filter(speakers__user=request.user),
|
'my_talks': Talk.on_site.filter(speakers=request.user),
|
||||||
'other_talks': Talk.on_site.exclude(speakers__user=request.user),
|
'other_talks': Talk.on_site.exclude(speakers=request.user),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@ -34,7 +35,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(Speaker, user__username=speaker)
|
speaker = get_object_or_404(User, username=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,
|
||||||
'talks': Talk.on_site.filter(speakers=speaker),
|
'talks': Talk.on_site.filter(speakers=speaker),
|
||||||
|
@ -47,7 +48,7 @@ def talk_edit(request, talk=None):
|
||||||
talk = get_object_or_404(Talk, slug=talk)
|
talk = get_object_or_404(Talk, slug=talk)
|
||||||
if talk.site != get_current_site(request):
|
if talk.site != get_current_site(request):
|
||||||
raise PermissionDenied()
|
raise PermissionDenied()
|
||||||
if not request.user.is_superuser and not talk.speakers.filter(user=request.user).exists():
|
if not request.user.is_superuser and request.user not in talk.speakers.all():
|
||||||
# FIXME fine permissions
|
# FIXME fine permissions
|
||||||
raise PermissionDenied()
|
raise PermissionDenied()
|
||||||
form = TalkForm(request.POST or None, instance=talk)
|
form = TalkForm(request.POST or None, instance=talk)
|
||||||
|
@ -60,8 +61,8 @@ 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 = Speaker.on_site.get_or_create(user=request.user, site=site)[0]
|
Speaker.on_site.get_or_create(user=request.user, site=site)
|
||||||
Speach.objects.create(speaker=speaker, talk=talk)
|
Speach.objects.create(speaker=request.user, talk=talk)
|
||||||
messages.success(request, 'Talk proposed successfully!')
|
messages.success(request, 'Talk proposed successfully!')
|
||||||
return redirect(talk.get_absolute_url())
|
return redirect(talk.get_absolute_url())
|
||||||
return render(request, 'proposals/talk_edit.html', {
|
return render(request, 'proposals/talk_edit.html', {
|
||||||
|
@ -78,11 +79,11 @@ class TopicList(LoginRequiredMixin, ListView):
|
||||||
|
|
||||||
|
|
||||||
class SpeakerList(LoginRequiredMixin, ListView):
|
class SpeakerList(LoginRequiredMixin, ListView):
|
||||||
queryset = Speaker.on_site.all()
|
queryset = User.objects.filter(speach__talk=Talk.on_site.all())
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def user_details(request, username):
|
def user_details(request, username):
|
||||||
return render(request, 'proposals/user_details.html', {
|
return render(request, 'proposals/user_details.html', {
|
||||||
'user': get_object_or_404(Profile, user__username=username),
|
'user': get_object_or_404(User, username=username).profile,
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue