admin area: manage tag and categories
This commit is contained in:
parent
6e62f7b872
commit
131d8d7033
12
cfp/forms.py
12
cfp/forms.py
|
@ -308,12 +308,24 @@ class TrackForm(OnSiteNamedModelForm):
|
||||||
fields = ['name', 'description']
|
fields = ['name', 'description']
|
||||||
|
|
||||||
|
|
||||||
|
class TalkCategoryForm(OnSiteNamedModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = TalkCategory
|
||||||
|
fields = ['name', 'duration', 'color', 'label', 'opening_date', 'closing_date']
|
||||||
|
|
||||||
|
|
||||||
class RoomForm(OnSiteNamedModelForm):
|
class RoomForm(OnSiteNamedModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Room
|
model = Room
|
||||||
fields = ['name', 'label', 'capacity']
|
fields = ['name', 'label', 'capacity']
|
||||||
|
|
||||||
|
|
||||||
|
class TagForm(OnSiteNamedModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = Tag
|
||||||
|
fields = ['name', 'color', 'inverted', 'public']
|
||||||
|
|
||||||
|
|
||||||
class VolunteerForm(forms.ModelForm):
|
class VolunteerForm(forms.ModelForm):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
self.conference = kwargs.pop('conference')
|
self.conference = kwargs.pop('conference')
|
||||||
|
|
|
@ -207,11 +207,16 @@ class Tag(models.Model):
|
||||||
inverted = models.BooleanField(default=False)
|
inverted = models.BooleanField(default=False)
|
||||||
public = models.BooleanField(default=False, verbose_name=_('Show the tag on the program'))
|
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
|
@property
|
||||||
def link(self):
|
def link(self):
|
||||||
return format_html('<a href="{url}?tag={tag}">{content}</a>', **{
|
return format_html('<a href="{url}">{content}</a>', **{
|
||||||
'url': reverse('talk-list'),
|
'url': self.get_filter_url(),
|
||||||
'tag': self.slug,
|
|
||||||
'content': self.label,
|
'content': self.label,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -260,6 +265,9 @@ class TalkCategory(models.Model): # type of talk (conf 30min, 1h, stand, …)
|
||||||
return ugettext(self.name)
|
return ugettext(self.name)
|
||||||
|
|
||||||
def get_absolute_url(self):
|
def get_absolute_url(self):
|
||||||
|
return reverse('category-list')
|
||||||
|
|
||||||
|
def get_filter_url(self):
|
||||||
return reverse('talk-list') + '?category=%d' % self.pk
|
return reverse('talk-list') + '?category=%d' % self.pk
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<ul class="nav nav-pills nav-justified subnav">
|
<ul class="nav nav-pills nav-justified subnav">
|
||||||
<li{% block conferencetab %}{% endblock %}><a href="{% url 'conference' %}"><span class="glyphicon glyphicon-asterisk"></span> {% trans "Conference" %}</a></li>
|
<li{% block conferencetab %}{% endblock %}><a href="{% url 'conference' %}"><span class="glyphicon glyphicon-asterisk"></span> {% trans "Conference" %}</a></li>
|
||||||
|
<li{% block categoriestab %}{% endblock %}><a href="{% url 'category-list' %}"><span class="glyphicon glyphicon-asterisk"></span> {% trans "Categories" %}</a></li>
|
||||||
|
<li{% block tagstab %}{% endblock %}><a href="{% url 'tag-list' %}"><span class="glyphicon glyphicon-asterisk"></span> {% trans "Tags" %}</a></li>
|
||||||
{% if request.user.is_staff %}
|
{% if request.user.is_staff %}
|
||||||
<li><a href="{% url 'admin:index' %}"><span class="glyphicon glyphicon-dashboard"></span> Django-Admin</a></li>
|
<li><a href="{% url 'admin:index' %}"><span class="glyphicon glyphicon-dashboard"></span> Django-Admin</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
@ -59,6 +59,12 @@ urlpatterns = [
|
||||||
url(r'^staff/select2/$', views.Select2View.as_view(), name='django_select2-json'),
|
url(r'^staff/select2/$', views.Select2View.as_view(), name='django_select2-json'),
|
||||||
url(r'^admin/$', views.admin, name='admin'),
|
url(r'^admin/$', views.admin, name='admin'),
|
||||||
url(r'^admin/conference/$', views.conference_edit, name='conference'),
|
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'^schedule/((?P<program_format>[\w]+)/)?$', views.public_schedule, name='public-schedule'),
|
||||||
#url(r'^markdown/$', views.markdown_preview, name='markdown'),
|
#url(r'^markdown/$', views.markdown_preview, name='markdown'),
|
||||||
]
|
]
|
||||||
|
|
59
cfp/views.py
59
cfp/views.py
|
@ -29,6 +29,7 @@ from .forms import TalkForm, TalkStaffForm, TalkFilterForm, TalkActionForm, \
|
||||||
ParticipantForm, ParticipantFilterForm, NotifyForm, \
|
ParticipantForm, ParticipantFilterForm, NotifyForm, \
|
||||||
ConferenceForm, CreateUserForm, TrackForm, RoomForm, \
|
ConferenceForm, CreateUserForm, TrackForm, RoomForm, \
|
||||||
VolunteerForm, VolunteerFilterForm, MailForm, \
|
VolunteerForm, VolunteerFilterForm, MailForm, \
|
||||||
|
TagForm, TalkCategoryForm, \
|
||||||
ACCEPTATION_VALUES, CONFIRMATION_VALUES
|
ACCEPTATION_VALUES, CONFIRMATION_VALUES
|
||||||
|
|
||||||
|
|
||||||
|
@ -837,6 +838,64 @@ class RoomUpdate(StaffRequiredMixin, RoomFormMixin, UpdateView):
|
||||||
pass
|
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
|
@staff_required
|
||||||
def create_user(request):
|
def create_user(request):
|
||||||
form = CreateUserForm(request.POST or None)
|
form = CreateUserForm(request.POST or None)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user