0001-agendas-move-desks-prefetch-code-from-view-to-model-.patch
chrono/agendas/models.py | ||
---|---|---|
529 | 529 |
except (VariableDoesNotExist, TemplateSyntaxError): |
530 | 530 |
return |
531 | 531 | |
532 |
def prefetch_desks_and_exceptions(self): |
|
533 |
assert self.kind != 'events' |
|
534 | ||
535 |
self.prefetched_desks = self.desk_set.all().prefetch_related( |
|
536 |
'timeperiod_set', 'unavailability_calendars', |
|
537 |
) |
|
538 |
all_desks_exceptions = TimePeriodException.objects.filter( |
|
539 |
Q(desk__in=self.prefetched_desks) | Q(unavailability_calendar__desks__in=self.prefetched_desks) |
|
540 |
).select_related('source') |
|
541 |
for desk in self.prefetched_desks: |
|
542 |
uc_ids = [uc.pk for uc in desk.unavailability_calendars.all()] |
|
543 |
desk.prefetched_exceptions = [ |
|
544 |
e |
|
545 |
for e in all_desks_exceptions |
|
546 |
if e.desk_id == desk.pk or e.unavailability_calendar_id in uc_ids |
|
547 |
] |
|
548 | ||
532 | 549 | |
533 | 550 |
class VirtualMember(models.Model): |
534 | 551 |
'''Trough model to link virtual agendas to their real agendas. |
chrono/manager/views.py | ||
---|---|---|
1353 | 1353 | |
1354 | 1354 |
def get_object(self, *args, **kwargs): |
1355 | 1355 |
if self.agenda.kind == 'meetings': |
1356 |
self.agenda.prefetched_desks = self.agenda.desk_set.all().prefetch_related( |
|
1357 |
'timeperiod_set', 'unavailability_calendars', |
|
1358 |
) |
|
1359 |
all_desks_exceptions = TimePeriodException.objects.filter( |
|
1360 |
Q(desk__in=self.agenda.prefetched_desks) |
|
1361 |
| Q(unavailability_calendar__desks__in=self.agenda.prefetched_desks) |
|
1362 |
).select_related('source') |
|
1363 |
for desk in self.agenda.prefetched_desks: |
|
1364 |
uc_ids = [uc.pk for uc in desk.unavailability_calendars.all()] |
|
1365 |
desk.prefetched_exceptions = [ |
|
1366 |
e |
|
1367 |
for e in all_desks_exceptions |
|
1368 |
if e.desk_id == desk.pk or e.unavailability_calendar_id in uc_ids |
|
1369 |
] |
|
1356 |
self.agenda.prefetch_desks_and_exceptions() |
|
1370 | 1357 |
return self.agenda |
1371 | 1358 | |
1372 | 1359 |
def get_context_data(self, **kwargs): |
1373 |
- |