admin area: manage tag and categories

This commit is contained in:
Élie Bouttier 2017-11-07 23:54:09 +01:00
parent 6e62f7b872
commit 131d8d7033
5 changed files with 90 additions and 3 deletions

View File

@ -308,12 +308,24 @@ class TrackForm(OnSiteNamedModelForm):
fields = ['name', 'description']
class TalkCategoryForm(OnSiteNamedModelForm):
class Meta:
model = TalkCategory
fields = ['name', 'duration', 'color', 'label', 'opening_date', 'closing_date']
class RoomForm(OnSiteNamedModelForm):
class Meta:
model = Room
fields = ['name', 'label', 'capacity']
class TagForm(OnSiteNamedModelForm):
class Meta:
model = Tag
fields = ['name', 'color', 'inverted', 'public']
class VolunteerForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.conference = kwargs.pop('conference')

View File

@ -207,11 +207,16 @@ class Tag(models.Model):
inverted = models.BooleanField(default=False)
public = models.BooleanField(default=False, verbose_name=_('Show the tag on the program'))
def get_absolute_url(self):
return reverse('tag-list')
def get_filter_url(self):
return reverse('talk-list') + '?tag=' + self.slug
@property
def link(self):
return format_html('<a href="{url}?tag={tag}">{content}</a>', **{
'url': reverse('talk-list'),
'tag': self.slug,
return format_html('<a href="{url}">{content}</a>', **{
'url': self.get_filter_url(),
'content': self.label,
})
@ -260,6 +265,9 @@ class TalkCategory(models.Model): # type of talk (conf 30min, 1h, stand, …)
return ugettext(self.name)
def get_absolute_url(self):
return reverse('category-list')
def get_filter_url(self):
return reverse('talk-list') + '?category=%d' % self.pk

View File

@ -8,6 +8,8 @@
<div class="container">
<ul class="nav nav-pills nav-justified subnav">
<li{% block conferencetab %}{% endblock %}><a href="{% url 'conference' %}"><span class="glyphicon glyphicon-asterisk"></span>&nbsp;{% trans "Conference" %}</a></li>
<li{% block categoriestab %}{% endblock %}><a href="{% url 'category-list' %}"><span class="glyphicon glyphicon-asterisk"></span>&nbsp;{% trans "Categories" %}</a></li>
<li{% block tagstab %}{% endblock %}><a href="{% url 'tag-list' %}"><span class="glyphicon glyphicon-asterisk"></span>&nbsp;{% trans "Tags" %}</a></li>
{% if request.user.is_staff %}
<li><a href="{% url 'admin:index' %}"><span class="glyphicon glyphicon-dashboard"></span>&nbsp;Django-Admin</a></li>
{% endif %}

View File

@ -59,6 +59,12 @@ urlpatterns = [
url(r'^staff/select2/$', views.Select2View.as_view(), name='django_select2-json'),
url(r'^admin/$', views.admin, name='admin'),
url(r'^admin/conference/$', views.conference_edit, name='conference'),
url(r'^staff/categories/$', views.TalkCategoryList.as_view(), name='category-list'),
url(r'^staff/categories/add/$', views.TalkCategoryCreate.as_view(), name='category-add'),
url(r'^staff/categories/(?P<pk>[0-9]+)/edit/$', views.TalkCategoryUpdate.as_view(), name='category-edit'),
url(r'^staff/tags/$', views.TagList.as_view(), name='tag-list'),
url(r'^staff/tags/add/$', views.TagCreate.as_view(), name='tag-add'),
url(r'^staff/tags/(?P<slug>[-\w]+)/edit/$', views.TagUpdate.as_view(), name='tag-edit'),
url(r'^schedule/((?P<program_format>[\w]+)/)?$', views.public_schedule, name='public-schedule'),
#url(r'^markdown/$', views.markdown_preview, name='markdown'),
]

View File

@ -29,6 +29,7 @@ from .forms import TalkForm, TalkStaffForm, TalkFilterForm, TalkActionForm, \
ParticipantForm, ParticipantFilterForm, NotifyForm, \
ConferenceForm, CreateUserForm, TrackForm, RoomForm, \
VolunteerForm, VolunteerFilterForm, MailForm, \
TagForm, TalkCategoryForm, \
ACCEPTATION_VALUES, CONFIRMATION_VALUES
@ -837,6 +838,64 @@ class RoomUpdate(StaffRequiredMixin, RoomFormMixin, UpdateView):
pass
class TalkCategoryMixin(OnSiteMixin):
model = TalkCategory
class TalkCategoryList(StaffRequiredMixin, TalkCategoryMixin, ListView):
template_name = 'cfp/admin/category_list.html'
class TalkCategoryFormMixin(TalkCategoryMixin):
template_name = 'cfp/admin/category_form.html'
form_class = TalkCategoryForm
success_url = reverse_lazy('category-list')
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs.update({
'conference': self.request.conference,
})
return kwargs
class TalkCategoryCreate(StaffRequiredMixin, TalkCategoryFormMixin, CreateView):
pass
class TalkCategoryUpdate(StaffRequiredMixin, TalkCategoryFormMixin, UpdateView):
pass
class TagMixin(OnSiteMixin):
model = Tag
class TagList(StaffRequiredMixin, TagMixin, ListView):
template_name = 'cfp/admin/tag_list.html'
class TagFormMixin(TagMixin):
template_name = 'cfp/admin/tag_form.html'
form_class = TagForm
success_url = reverse_lazy('tag-list')
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs.update({
'conference': self.request.conference,
})
return kwargs
class TagCreate(StaffRequiredMixin, TagFormMixin, CreateView):
pass
class TagUpdate(StaffRequiredMixin, TagFormMixin, UpdateView):
pass
@staff_required
def create_user(request):
form = CreateUserForm(request.POST or None)