forked from AFPy/PonyConf
wip
This commit is contained in:
parent
dab6bf83f9
commit
336fd90275
|
@ -1,5 +1,6 @@
|
|||
from django.contrib.sites.managers import CurrentSiteManager
|
||||
from django.contrib.sites.models import Site
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.db import models
|
||||
|
||||
from autoslug import AutoSlugField
|
||||
|
@ -11,17 +12,15 @@ __all__ = ['Topic', 'Talk', 'Speach']
|
|||
|
||||
class Topic(models.Model):
|
||||
|
||||
site = models.ForeignKey(Site, on_delete=models.CASCADE)
|
||||
|
||||
name = models.CharField(max_length=128, verbose_name='Name', unique=True)
|
||||
slug = AutoSlugField(populate_from='name', unique=True)
|
||||
|
||||
objects = models.Manager()
|
||||
on_site = CurrentSiteManager()
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('list-talks-by-topic', kwargs={'slug': self.slug})
|
||||
|
||||
|
||||
class Talk(models.Model):
|
||||
|
||||
|
@ -39,6 +38,9 @@ class Talk(models.Model):
|
|||
def __str__(self):
|
||||
return self.title
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('show-talk', kwargs={'slug': self.slug})
|
||||
|
||||
|
||||
class Speach(models.Model):
|
||||
|
||||
|
@ -46,7 +48,7 @@ class Speach(models.Model):
|
|||
|
||||
speaker = models.ForeignKey(Speaker, on_delete=models.CASCADE)
|
||||
talk = models.ForeignKey(Talk, on_delete=models.CASCADE)
|
||||
order = models.IntegerField(choices=SPEAKER_NO)
|
||||
order = models.IntegerField(choices=SPEAKER_NO, default=1)
|
||||
|
||||
class Meta:
|
||||
ordering = ['talk', 'order']
|
||||
|
@ -58,5 +60,8 @@ class Speach(models.Model):
|
|||
def __str__(self):
|
||||
return '%s speaking at %s in position %d' % (self.speaker, self.talk, self.order)
|
||||
|
||||
def get_absolute_url(self):
|
||||
return self.talk.get_absolute_url()
|
||||
|
||||
def username(self):
|
||||
return self.speaker.user.username
|
||||
|
|
|
@ -24,8 +24,8 @@ class ProposalsTests(TestCase):
|
|||
for view in ['home', 'list-talks', 'add-talk', 'list-topics', 'list-speakers']:
|
||||
self.assertEqual(self.client.get(reverse(view)).status_code, 200)
|
||||
talk = Talk.on_site.first()
|
||||
for view in ['edit-talk', 'show-talk']:
|
||||
self.assertEqual(self.client.get(reverse(view, kwargs={'talk': talk.slug})).status_code, 200)
|
||||
self.assertEqual(self.client.get(reverse('edit-talk', kwargs={'talk': talk.slug})).status_code, 200)
|
||||
self.assertEqual(self.client.get(reverse('show-talk', kwargs={'slug': talk.slug})).status_code, 200)
|
||||
self.assertEqual(self.client.get(reverse('list-talks-by-speaker', kwargs={'speaker': 'a'})).status_code, 200)
|
||||
self.assertEqual(self.client.get(reverse('show-user', kwargs={'username': 'a'})).status_code, 200)
|
||||
|
||||
|
|
|
@ -7,10 +7,10 @@ urlpatterns = [
|
|||
url(r'^talk/$', views.talk_list, name='list-talks'),
|
||||
url(r'^talk/add/$', views.talk_edit, name='add-talk'),
|
||||
url(r'^talk/edit/(?P<talk>[-\w]+)$', views.talk_edit, name='edit-talk'),
|
||||
url(r'^talk/details/(?P<talk>[-\w]+)$', views.talk_details, name='show-talk'),
|
||||
url(r'^talk/details/(?P<slug>[-\w]+)$', views.TalkDetail.as_view(), name='show-talk'),
|
||||
url(r'^talk/by-topic/(?P<topic>[-\w]+)$', views.talk_list_by_topic, name='list-talks-by-topic'),
|
||||
url(r'^talk/by-speaker/(?P<speaker>[\w.@+-]+)$', views.talk_list_by_speaker, name='list-talks-by-speaker'),
|
||||
url(r'^topic/$', views.topic_list, name='list-topics'),
|
||||
url(r'^speakers/$', views.speaker_list, name='list-speakers'),
|
||||
url(r'^topic/$', views.TopicList.as_view(), name='list-topics'),
|
||||
url(r'^speakers/$', views.SpeakerList.as_view(), name='list-speakers'),
|
||||
url(r'^user/(?P<username>[\w.@+-]+)$', views.user_details, name='show-user'),
|
||||
]
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
from django.contrib import messages
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
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 django.views.generic import DetailView, ListView
|
||||
|
||||
from accounts.models import Profile, Speaker
|
||||
from proposals.forms import TalkForm
|
||||
|
@ -15,37 +17,27 @@ def home(request):
|
|||
|
||||
@login_required
|
||||
def talk_list(request):
|
||||
speaker = Speaker.on_site.filter(user=request.user)
|
||||
if speaker.exists():
|
||||
speaker = speaker.first()
|
||||
mine = Talk.on_site.filter(speakers=speaker)
|
||||
others = Talk.on_site.exclude(speakers=speaker)
|
||||
else:
|
||||
mine = []
|
||||
others = Talk.on_site.all()
|
||||
return render(request, 'proposals/talks.html', {
|
||||
'my_talks': mine,
|
||||
'other_talks': others,
|
||||
'my_talks': Talk.on_site.filter(speakers__user=request.user),
|
||||
'other_talks': Talk.on_site.exclude(speakers__user=request.user),
|
||||
})
|
||||
|
||||
|
||||
@login_required
|
||||
def talk_list_by_topic(request, topic):
|
||||
topic = get_object_or_404(Topic, site=get_current_site(request), slug=topic)
|
||||
talks = Talk.objects.filter(topics=topic)
|
||||
topic = get_object_or_404(Topic, slug=topic)
|
||||
return render(request, 'proposals/talk_list.html', {
|
||||
'title': 'Talks related to %s:' % topic.name,
|
||||
'talks': talks,
|
||||
'title': 'Talks related to %s:' % topic,
|
||||
'talks': Talk.on_site.filter(topics=topic),
|
||||
})
|
||||
|
||||
|
||||
@login_required
|
||||
def talk_list_by_speaker(request, 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,
|
||||
'talks': talks,
|
||||
'talks': Talk.on_site.filter(speakers=speaker),
|
||||
})
|
||||
|
||||
|
||||
|
@ -69,42 +61,28 @@ def talk_edit(request, talk=None):
|
|||
talk.site = site
|
||||
talk.save()
|
||||
speaker = Speaker.on_site.get_or_create(user=request.user, site=site)[0]
|
||||
speach = Speach(speaker=speaker, talk=talk, order=1)
|
||||
speach.save()
|
||||
Speach.objects.create(speaker=speaker, talk=talk)
|
||||
messages.success(request, 'Talk proposed successfully!')
|
||||
return redirect('show-talk', talk.slug)
|
||||
return redirect(talk.get_absolute_url())
|
||||
return render(request, 'proposals/talk_edit.html', {
|
||||
'form': form,
|
||||
})
|
||||
|
||||
|
||||
@login_required
|
||||
def talk_details(request, talk):
|
||||
talk = get_object_or_404(Talk, slug=talk)
|
||||
return render(request, 'proposals/talk_details.html', {
|
||||
'talk': talk,
|
||||
})
|
||||
class TalkDetail(LoginRequiredMixin, DetailView):
|
||||
queryset = Talk.on_site.all()
|
||||
|
||||
|
||||
@login_required
|
||||
def topic_list(request):
|
||||
topics = Topic.on_site.all()
|
||||
return render(request, 'proposals/topic_list.html', {
|
||||
'topics': topics,
|
||||
})
|
||||
class TopicList(LoginRequiredMixin, ListView):
|
||||
model = Topic
|
||||
|
||||
|
||||
@login_required
|
||||
def speaker_list(request):
|
||||
speakers = Speaker.on_site.all()
|
||||
return render(request, 'proposals/speaker_list.html', {
|
||||
'speaker': speakers,
|
||||
})
|
||||
class SpeakerList(LoginRequiredMixin, ListView):
|
||||
queryset = Speaker.on_site.all()
|
||||
|
||||
|
||||
@login_required
|
||||
def user_details(request, username):
|
||||
user = get_object_or_404(Profile, user__username=username)
|
||||
return render(request, 'proposals/user_details.html', {
|
||||
'user': user,
|
||||
'user': get_object_or_404(Profile, user__username=username),
|
||||
})
|
||||
|
|
Loading…
Reference in New Issue
Block a user