event_list_json #80
@@ -527,3 +527,94 @@ class Event(models.Model):
|
|||||||
template_name = os.path.join('dav_events', 'event', 'default.html')
|
template_name = os.path.join('dav_events', 'event', 'default.html')
|
||||||
template = get_template(template_name)
|
template = get_template(template_name)
|
||||||
return template.render(self.get_template_context())
|
return template.render(self.get_template_context())
|
||||||
|
|
||||||
|
def as_dict(self, json=True):
|
||||||
|
d = {
|
||||||
|
'number': self.get_number(),
|
||||||
|
'title': self.title,
|
||||||
|
'description': self.description,
|
||||||
|
|
||||||
|
'mode': self.mode,
|
||||||
|
'mode_display': self.get_mode_display(),
|
||||||
|
'sport': self.sport,
|
||||||
|
'sport_display': self.get_sport_display(),
|
||||||
|
'level': self.level,
|
||||||
|
'level_display': self.get_level_display(),
|
||||||
|
|
||||||
|
'first_day': self.first_day,
|
||||||
|
'last_day': self.last_day,
|
||||||
|
'alt_first_day': self.alt_first_day,
|
||||||
|
'alt_last_day': self.alt_last_day,
|
||||||
|
|
||||||
|
'location': self.location,
|
||||||
|
'basecamp': self.basecamp,
|
||||||
|
|
||||||
|
'meeting_time': self.meeting_time,
|
||||||
|
'departure_time': self.departure_time,
|
||||||
|
'departure_ride': self.departure_ride,
|
||||||
|
'return_departure_time': self.return_departure_time,
|
||||||
|
'return_arrival_time': self.return_arrival_time,
|
||||||
|
|
||||||
|
'requirements': self.requirements,
|
||||||
|
'equipment': self.equipment,
|
||||||
|
|
||||||
|
'pre_meeting_1': self.pre_meeting_1,
|
||||||
|
'pre_meeting_2': self.pre_meeting_2,
|
||||||
|
|
||||||
|
'trainer_fullname': self.get_trainer_full_name(),
|
||||||
|
'trainer_firstname': self.trainer_firstname,
|
||||||
|
'trainer_familyname': self.trainer_familyname,
|
||||||
|
'trainer_email': self.trainer_email,
|
||||||
|
'trainer_phone': self.trainer_phone,
|
||||||
|
'trainer_2_fullname': self.trainer_2_fullname,
|
||||||
|
'trainer_2_email': self.trainer_2_email,
|
||||||
|
'trainer_2_phone': self.trainer_2_phone,
|
||||||
|
'trainer_3_fullname': self.trainer_3_fullname,
|
||||||
|
'trainer_3_email': self.trainer_3_email,
|
||||||
|
'trainer_3_phone': self.trainer_3_phone,
|
||||||
|
|
||||||
|
'min_participants': self.min_participants,
|
||||||
|
'max_participants': self.max_participants,
|
||||||
|
'registration_required': self.registration_required,
|
||||||
|
'registration_howto': self.registration_howto,
|
||||||
|
'deadline': self.deadline,
|
||||||
|
'registration_closed': self.registration_closed,
|
||||||
|
|
||||||
|
'charge': self.charge,
|
||||||
|
'additional_costs': self.additional_costs,
|
||||||
|
|
||||||
|
'course_topic_1': self.course_topic_1,
|
||||||
|
'course_topic_2': self.course_topic_2,
|
||||||
|
'course_topic_3': self.course_topic_3,
|
||||||
|
'course_topic_4': self.course_topic_4,
|
||||||
|
'course_topic_5': self.course_topic_5,
|
||||||
|
'course_topic_6': self.course_topic_6,
|
||||||
|
'course_goal_1': self.course_goal_1,
|
||||||
|
'course_goal_2': self.course_goal_2,
|
||||||
|
'course_goal_3': self.course_goal_3,
|
||||||
|
'course_goal_4': self.course_goal_4,
|
||||||
|
'course_goal_5': self.course_goal_5,
|
||||||
|
'course_goal_6': self.course_goal_6,
|
||||||
|
}
|
||||||
|
if json:
|
||||||
|
d['country'] = str(self.country)
|
||||||
|
d['country_display'] = self.get_country_display()
|
||||||
|
for field in ('transport', 'meeting_point', 'accommodation', 'meals'):
|
||||||
|
value = getattr(self, field)
|
||||||
|
d[field] = value
|
||||||
|
display_field_name = '%s_display' % field
|
||||||
|
if value == 'NONE':
|
||||||
|
d[display_field_name] = None
|
||||||
|
elif value == 'OTHER':
|
||||||
|
other = getattr(self, '%s_other' % field)
|
||||||
|
d[display_field_name] = other
|
||||||
|
else:
|
||||||
|
func = getattr(self, 'get_%s_display' % field)
|
||||||
|
d[display_field_name] = func()
|
||||||
|
else:
|
||||||
|
d['country'] = self.country
|
||||||
|
for field in ('transport', 'meeting_point', 'accommodation', 'meals'):
|
||||||
|
value = getattr(self, field)
|
||||||
|
d[field] = value
|
||||||
|
|
||||||
|
return d
|
||||||
@@ -11,4 +11,5 @@ urlpatterns = [
|
|||||||
url(r'^event/(?P<pk>\d+)/registration', views.RegistrationView.as_view(), name='register'),
|
url(r'^event/(?P<pk>\d+)/registration', views.RegistrationView.as_view(), name='register'),
|
||||||
url(r'^event/(?P<pk>\d+)/', views.EventDetailView.as_view(), name='event'),
|
url(r'^event/(?P<pk>\d+)/', views.EventDetailView.as_view(), name='event'),
|
||||||
url(r'^event', views.EventListView.as_view(), name='events'),
|
url(r'^event', views.EventListView.as_view(), name='events'),
|
||||||
|
url(r'^api/v1/event', views.EventListAsJSONView, name='api_events'),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import logging
|
|||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
|
from django.http import JsonResponse
|
||||||
from django.urls import reverse_lazy
|
from django.urls import reverse_lazy
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from django.views import generic
|
from django.views import generic
|
||||||
@@ -64,6 +65,30 @@ class EventListView(generic.ListView):
|
|||||||
return super().get(request, *args, **kwargs)
|
return super().get(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
def EventListAsJSONView(request):
|
||||||
|
filter_cleaned = []
|
||||||
|
if 'filter' in request.GET:
|
||||||
|
choices = SPORT_CHOICES.codes + LEVEL_CHOICES.codes
|
||||||
|
filter_input = request.GET['filter'].split(',')
|
||||||
|
filter_cleaned = list(set(filter_input) & set(choices))
|
||||||
|
|
||||||
|
today = datetime.date.today()
|
||||||
|
|
||||||
|
filter_exp = Q(flags__status__code__in=('publishing', 'publishing_web', 'publishing_facebook',
|
||||||
|
'published', 'published_web', 'published_facebook'))
|
||||||
|
filter_exp &= Q(planned_publication_date__isnull=True) | Q(planned_publication_date__lte=today)
|
||||||
|
filter_exp &= Q(first_day__gte=today)
|
||||||
|
# filter_exp &= Q(registration_closed=False)
|
||||||
|
# filter_exp &= Q(deadline__isnull=True) | Q(deadline__gte=today)
|
||||||
|
if filter_cleaned:
|
||||||
|
filter_exp &= Q(sport__in=filter_cleaned) | Q(level__in=filter_cleaned)
|
||||||
|
|
||||||
|
qs = Event.objects.filter(filter_exp).order_by('first_day', 'number').distinct()
|
||||||
|
data = [event.as_dict(json=True) for event in qs]
|
||||||
|
response = JsonResponse(data, safe=False)
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
class EventDetailView(generic.DetailView):
|
class EventDetailView(generic.DetailView):
|
||||||
model = Event
|
model = Event
|
||||||
template_name = 'dav_registration/event_detail.html'
|
template_name = 'dav_registration/event_detail.html'
|
||||||
|
|||||||
Reference in New Issue
Block a user