show all speakers of a presentation
This commit is contained in:
parent
6f172da50a
commit
c1ff1546fe
5 changed files with 34 additions and 26 deletions
|
@ -117,7 +117,7 @@ class Presentation(models.Model):
|
||||||
description = MarkupField()
|
description = MarkupField()
|
||||||
abstract = MarkupField()
|
abstract = MarkupField()
|
||||||
speaker = models.ForeignKey("speakers.Speaker", related_name="presentations")
|
speaker = models.ForeignKey("speakers.Speaker", related_name="presentations")
|
||||||
additional_speakers = models.ManyToManyField("speakers.Speaker", blank=True)
|
additional_speakers = models.ManyToManyField("speakers.Speaker", related_name="copresentations", blank=True)
|
||||||
cancelled = models.BooleanField(default=False)
|
cancelled = models.BooleanField(default=False)
|
||||||
proposal_base = models.OneToOneField(ProposalBase, related_name="presentation")
|
proposal_base = models.OneToOneField(ProposalBase, related_name="presentation")
|
||||||
section = models.ForeignKey(Section, related_name="presentations")
|
section = models.ForeignKey(Section, related_name="presentations")
|
||||||
|
|
|
@ -42,3 +42,13 @@ class Speaker(models.Model):
|
||||||
return self.user.email
|
return self.user.email
|
||||||
else:
|
else:
|
||||||
return self.invite_email
|
return self.invite_email
|
||||||
|
|
||||||
|
@property
|
||||||
|
def all_presentations(self):
|
||||||
|
presentations = []
|
||||||
|
if self.presentations:
|
||||||
|
for p in self.presentations.all():
|
||||||
|
presentations.append(p)
|
||||||
|
for p in self.copresentations.all():
|
||||||
|
presentations.append(p)
|
||||||
|
return presentations
|
||||||
|
|
|
@ -126,10 +126,11 @@ def speaker_edit(request, pk=None):
|
||||||
|
|
||||||
def speaker_profile(request, pk):
|
def speaker_profile(request, pk):
|
||||||
speaker = get_object_or_404(Speaker, pk=pk)
|
speaker = get_object_or_404(Speaker, pk=pk)
|
||||||
|
presentations = speaker.all_presentations
|
||||||
if not speaker.presentations and not request.user.is_staff:
|
if not presentations and not request.user.is_staff:
|
||||||
raise Http404()
|
raise Http404()
|
||||||
|
|
||||||
return render(request, "speakers/speaker_profile.html", {
|
return render(request, "speakers/speaker_profile.html", {
|
||||||
"speaker": speaker,
|
"speaker": speaker,
|
||||||
|
"presentations": presentations,
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,33 +1,30 @@
|
||||||
{% extends "site_base.html" %}
|
{% extends "site_base.html" %}
|
||||||
|
|
||||||
|
{% load sitetree %}
|
||||||
|
|
||||||
{% block head_title %}Presentation: {{ presentation.title }}{% endblock %}
|
{% block head_title %}Presentation: {{ presentation.title }}{% endblock %}
|
||||||
|
|
||||||
|
{% block breadcrumbs %}{% sitetree_breadcrumbs from "main" %}{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
|
{% if presentation.slot %}
|
||||||
|
<h4>
|
||||||
|
{{ presentation.slot.day.date|date:"l" }}
|
||||||
|
{{ presentation.slot.start}}–{{ presentation.slot.end }}
|
||||||
|
</h4>
|
||||||
|
{% endif %}
|
||||||
|
<h2>{{ presentation.title }}</h2>
|
||||||
|
|
||||||
<h1>{{ presentation.title }}</h1>
|
<h4>
|
||||||
|
|
||||||
<h2>
|
|
||||||
{% for speaker in presentation.speakers %}
|
{% for speaker in presentation.speakers %}
|
||||||
<a href="{% url speaker_profile speaker.pk %}">{{ speaker }}</a>
|
<a href="{% url speaker_profile speaker.pk %}">{{ speaker }}</a>{% if not forloop.last %}, {% endif %}{% endfor %}
|
||||||
{% if not forloop.last %}, {% endif %}{% endfor %}
|
</h4>
|
||||||
</h2>
|
|
||||||
|
|
||||||
<dl class="dl-horizontal">
|
<dl class="dl-horizontal">
|
||||||
<dt>Audience level:</dt>
|
<dt>Audience level:</dt>
|
||||||
<dd style="margin-bottom: 0;">{{ presentation.proposal.get_audience_level_display }}</dd>
|
<dd style="margin-bottom: 0;">{{ presentation.proposal.get_audience_level_display }}</dd>
|
||||||
<dt>Track:</dt>
|
|
||||||
<dd>{{ presentation.proposal.track }}</dd>
|
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
{% if presentation.slot %}
|
|
||||||
<h2>
|
|
||||||
{{ presentation.slot.day.date|date:"l" }}
|
|
||||||
{{ presentation.slot.start}}–{{ presentation.slot.end }}
|
|
||||||
in
|
|
||||||
{{ presentation.slot.rooms|join:", " }}
|
|
||||||
</h2>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<h3>Description</h3>
|
<h3>Description</h3>
|
||||||
|
|
||||||
<div class="description">{{ presentation.description }}</div>
|
<div class="description">{{ presentation.description }}</div>
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
{% load thumbnail %}
|
{% load thumbnail %}
|
||||||
|
|
||||||
|
|
||||||
{% block page_title %}{% endblock %}
|
{% block head_title %}{{ speaker.name }}{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
@ -23,7 +23,7 @@
|
||||||
<div class="bio">{{ speaker.biography|safe }}</div>
|
<div class="bio">{{ speaker.biography|safe }}</div>
|
||||||
|
|
||||||
<h2>Presentations</h2>
|
<h2>Presentations</h2>
|
||||||
{% for presentation in speaker.presentations.all %}
|
{% for presentation in presentations %}
|
||||||
<h3><a href="{% url schedule_presentation_detail presentation.pk %}">{{ presentation.title }}</a></h3>
|
<h3><a href="{% url schedule_presentation_detail presentation.pk %}">{{ presentation.title }}</a></h3>
|
||||||
{% if presentation.slot %}
|
{% if presentation.slot %}
|
||||||
<p>
|
<p>
|
||||||
|
|
Loading…
Reference in a new issue