|
|
|
|
@ -153,6 +153,39 @@ class EventMixin(object): |
|
|
|
|
self._nearest_events = result[:3] |
|
|
|
|
return self._nearest_events |
|
|
|
|
|
|
|
|
|
def get_recommend_expos_incl(self, _qs, tags, themes, exclude=None): |
|
|
|
|
now = datetime.datetime.now() |
|
|
|
|
month = now + relativedelta(months=1) |
|
|
|
|
month2 = now + relativedelta(months=2) |
|
|
|
|
exclude_pks = exclude or set([self.pk]) |
|
|
|
|
events_m2 = [] |
|
|
|
|
events_m = [] |
|
|
|
|
events = [] |
|
|
|
|
for params in [{'tag__in': tags}, {'theme__in': themes}]: |
|
|
|
|
qs = _qs.filter(**params).order_by('data_begin').distinct() |
|
|
|
|
events_m2.extend(list(qs.filter(data_begin__gte=month2).exclude(pk__in=exclude_pks)[3:5])) |
|
|
|
|
exclude_pks.update([x.pk for x in events_m2]) |
|
|
|
|
events_m.extend(list(qs.filter(data_begin__gte=month).exclude(pk__in=exclude_pks)[3:5])) |
|
|
|
|
exclude_pks.update([x.pk for x in events_m]) |
|
|
|
|
events.extend(list(qs.filter(data_begin__gte=now).exclude(pk__in=exclude_pks)[3:5])) |
|
|
|
|
exclude_pks.update([x.pk for x in events]) |
|
|
|
|
return (list(sorted(list(chain(*zip(*[x for x in [events_m2, events_m, events] if x])))[3:5], key=lambda x: x.data_begin)), exclude_pks) |
|
|
|
|
|
|
|
|
|
def get_recommend_expos(self): |
|
|
|
|
if getattr(self, '_nearest_events', None) is None: |
|
|
|
|
model = self.__class__ |
|
|
|
|
result = [] |
|
|
|
|
tags = list(self.tag.all().values_list('pk', flat=True)) |
|
|
|
|
themes = list(self.theme.all().values_list('pk', flat=True)) |
|
|
|
|
qs = model.objects.language().filter(country_id=self.country_id) |
|
|
|
|
result, exclude = self.get_nearest_events_incl(qs, tags, themes) |
|
|
|
|
if len(result) > 5: |
|
|
|
|
qs = model.objects.language() |
|
|
|
|
r, e = self.get_nearest_events_incl(qs, tags, themes, exclude) |
|
|
|
|
result += r |
|
|
|
|
self._nearest_events = result[3:5] |
|
|
|
|
return self._nearest_events |
|
|
|
|
|
|
|
|
|
def get_nearest_events_url(self): |
|
|
|
|
url_params = QueryDict('', mutable=True) |
|
|
|
|
url_params.update({ |
|
|
|
|
|