0002-misc-reduce-querysets-on-page-edition-page-39761.patch
combo/apps/lingo/models.py | ||
---|---|---|
148 | 148 |
if self.pk: |
149 | 149 |
qs = qs.exclude(pk=self.pk) |
150 | 150 |
qs.update(is_default=False) |
151 |
elif self.__class__.objects.filter(is_default=True).count() == 0:
|
|
151 |
elif not self.__class__.objects.filter(is_default=True).exists():
|
|
152 | 152 |
self.is_default = True |
153 | 153 |
super(Regie, self).save(*args, **kwargs) |
154 | 154 | |
... | ... | |
538 | 538 | |
539 | 539 |
@classmethod |
540 | 540 |
def is_enabled(cls): |
541 |
return Regie.objects.count() > 0
|
|
541 |
return Regie.objects.exists()
|
|
542 | 542 | |
543 | 543 |
def is_relevant(self, context): |
544 | 544 |
if not (getattr(context['request'], 'user', None) and context['request'].user.is_authenticated): |
545 | 545 |
return False |
546 |
return BasketItem.get_items_to_be_paid(context['request'].user).count() > 0
|
|
546 |
return BasketItem.get_items_to_be_paid(context['request'].user).exists()
|
|
547 | 547 | |
548 | 548 |
def get_badge(self, context): |
549 | 549 |
if not (getattr(context['request'], 'user', None) and context['request'].user.is_authenticated): |
... | ... | |
581 | 581 | |
582 | 582 |
@classmethod |
583 | 583 |
def is_enabled(cls): |
584 |
return Regie.objects.count() > 0
|
|
584 |
return Regie.objects.exists()
|
|
585 | 585 | |
586 | 586 |
def is_relevant(self, context): |
587 | 587 |
if not (getattr(context['request'], 'user', None) and context['request'].user.is_authenticated): |
588 | 588 |
return False |
589 |
transactions = Transaction.objects.filter( |
|
589 |
return ( |
|
590 |
Transaction.objects.filter( |
|
590 | 591 |
user=context['request'].user, |
591 | 592 |
start_date__gte=timezone.now()-datetime.timedelta(days=7)) |
592 |
return len(transactions) > 0
|
|
593 |
.exists())
|
|
593 | 594 | |
594 | 595 |
def render(self, context): |
595 | 596 |
recent_transactions_template = template.loader.get_template( |
... | ... | |
610 | 611 | |
611 | 612 |
@classmethod |
612 | 613 |
def is_enabled(cls): |
613 |
return Regie.objects.count() > 0
|
|
614 |
return Regie.objects.exists()
|
|
614 | 615 | |
615 | 616 |
def is_relevant(self, context): |
616 | 617 |
if not (getattr(context['request'], 'user', None) and context['request'].user.is_authenticated): |
617 | 618 |
return False |
618 |
return BasketItem.get_items_to_be_paid(context['request'].user).count() > 0
|
|
619 |
return BasketItem.get_items_to_be_paid(context['request'].user).exists()
|
|
619 | 620 | |
620 | 621 |
def render(self, context): |
621 | 622 |
if not (getattr(context['request'], 'user', None) and context['request'].user.is_authenticated): |
... | ... | |
648 | 649 | |
649 | 650 |
@classmethod |
650 | 651 |
def is_enabled(cls): |
651 |
return Regie.objects.exclude(webservice_url='').count() > 0
|
|
652 |
return Regie.objects.exclude(webservice_url='').exists()
|
|
652 | 653 | |
653 | 654 |
def is_relevant(self, context): |
654 | 655 |
return (getattr(context['request'], 'user', None) and context['request'].user.is_authenticated) |
... | ... | |
656 | 657 |
def get_default_form_class(self): |
657 | 658 |
fields = ['title', 'text'] |
658 | 659 |
widgets = {} |
659 |
if Regie.objects.exclude(webservice_url='').count() > 1: |
|
660 |
regie_qs = Regie.objects.exclude(webservice_url='') |
|
661 |
if len(regie_qs) > 1: |
|
660 | 662 |
regies = [('', _('All'))] |
661 |
regies.extend([(r.slug, r.label) for r in Regie.objects.exclude(webservice_url='')])
|
|
663 |
regies.extend([(r.slug, r.label) for r in regie_qs])
|
|
662 | 664 |
widgets['regie'] = Select(choices=regies) |
663 | 665 |
fields.insert(0, 'regie') |
664 | 666 |
return model_forms.modelform_factory(self.__class__, fields=fields, widgets=widgets) |
combo/data/models.py | ||
---|---|---|
316 | 316 |
parenting[page.parent_id].append(page) |
317 | 317 |
def fill_list(object_sublist, level=0, parent=None): |
318 | 318 |
for page in object_sublist: |
319 |
if page.parent == parent: |
|
319 |
parent_id = parent.pk if parent else None |
|
320 |
if page.parent_id == parent_id: |
|
320 | 321 |
page.level = level |
321 | 322 |
reordered.append(page) |
322 | 323 |
if page.id in parenting: |
combo/manager/templatetags/cells.py | ||
---|---|---|
22 | 22 |
@register.simple_tag(takes_context=True) |
23 | 23 |
def cell_form(context, cell): |
24 | 24 |
context['url'] = reverse('combo-manager-page-edit-cell', kwargs={ |
25 |
'page_pk': cell.page.id, 'cell_reference': cell.get_reference()})
|
|
25 |
'page_pk': cell.page_id, 'cell_reference': cell.get_reference()})
|
|
26 | 26 |
form_class = cell.get_default_form_class() |
27 | 27 |
if form_class: |
28 | 28 |
context['form'] = form_class(instance=cell, prefix='c%s' % cell.get_reference()) |
combo/manager/views.py | ||
---|---|---|
261 | 261 |
context['cell_type_groups'] = list(cell_type_groups.items()) |
262 | 262 |
context['cell_type_groups'].sort(key=lambda x: x[0]) |
263 | 263 | |
264 |
cells = CellBase.get_cells(page_id=self.object.id) |
|
264 |
cells = CellBase.get_cells(page=self.object) |
|
265 |
self.object.prefeteched_cells = cells |
|
265 | 266 |
template = self.object.template_name |
266 | 267 |
placeholders = [] |
267 | 268 |
optional_placeholders = [] |
combo/public/templates/combo/menu.html | ||
---|---|---|
2 | 2 |
<ul> |
3 | 3 |
{% spaceless %} |
4 | 4 |
{% for menuitem in menuitems %} |
5 |
<li data-menu-page-id="{{ menuitem.page.id }}" class="menu-{{ menuitem.page.slug }} {% if menuitem.selected %}selected{% endif %}"><a
|
|
5 |
<li data-menu-page-id="{{ menuitem.page_id }}" class="menu-{{ menuitem.page.slug }} {% if menuitem.selected %}selected{% endif %}"><a
|
|
6 | 6 |
href="{% page_absolute_url menuitem.page %}"><span>{{ menuitem.page.title }}</span></a> |
7 | 7 |
{% if depth > 1 %} |
8 | 8 |
{% show_menu current_page=menuitem.page level=-1 depth=depth reduce_depth=True ignore_visibility=ignore_visibility %} |
combo/public/templates/combo/placeholder.html | ||
---|---|---|
6 | 6 |
{% for cell in cells %} |
7 | 7 |
<div class="cell {{ cell.css_class_names }} {% if cell.slug %}{{cell.slug}}{% endif %} {% if cell|shown_because_admin:request %}shown-because-admin{% endif %}" |
8 | 8 |
{% if cell.slug and cell.use_slug_as_id %}id="{{ cell.slug }}"{% endif %} |
9 |
data-ajax-cell-url="{{ site_base }}{% url 'combo-public-ajax-page-cell' page_pk=cell.page.id cell_reference=cell.get_reference %}"
|
|
9 |
data-ajax-cell-url="{{ site_base }}{% url 'combo-public-ajax-page-cell' page_pk=cell.page_id cell_reference=cell.get_reference %}"
|
|
10 | 10 |
data-ajax-cell-loading-message="{{ cell.loading_message }}" |
11 | 11 |
data-ajax-cell-error-message="{% trans "Loading error" %}" |
12 | 12 |
{% if cell.ajax_refresh %}data-ajax-cell-refresh="{{ cell.ajax_refresh }}"{% endif %} |
combo/public/templatetags/combo.py | ||
---|---|---|
64 | 64 |
# page cells are not precomputed when rendering a single cell in an |
65 | 65 |
# ajax call |
66 | 66 |
page_cells = context.get('page_cells') |
67 |
elif 'page' in context and hasattr(context['page'], 'prefeteched_cells'): |
|
68 |
page_cells = context['page'].prefeteched_cells |
|
67 | 69 |
elif not context.get('render_skeleton'): |
68 | 70 |
page_cells = context['page'].get_cells() if 'page' in context else [] |
69 | 71 |
context['cells'] = [x for x in page_cells if |
tests/test_manager.py | ||
---|---|---|
334 | 334 |
) |
335 | 335 | |
336 | 336 |
app = login(app) |
337 |
app.get('/manage/pages/%s/' % page.pk) # load once to populate caches |
|
337 | 338 |
with CaptureQueriesContext(connection) as ctx: |
338 | 339 |
app.get('/manage/pages/%s/' % page.pk) |
339 |
assert len(ctx.captured_queries) == 89
|
|
340 |
assert len(ctx.captured_queries) == 29
|
|
340 | 341 | |
341 | 342 | |
342 | 343 |
def test_delete_page(app, admin_user): |
... | ... | |
471 | 472 |
assert resp.headers['content-type'] == 'application/json' |
472 | 473 |
assert resp.json['pages'][0].get('fields').get('slug') == 'one' |
473 | 474 | |
475 | ||
474 | 476 |
def test_export_page_order(): |
475 | 477 |
Page.objects.all().delete() |
476 |
page1 = Page(title='One', slug='one', template_name='standard') |
|
477 |
page2 = Page(title='Two', slug='two', parent=page1, template_name='standard') |
|
478 |
page3 = Page(title='Three', slug='three', parent=page2, template_name='standard') |
|
479 |
page4 = Page(title='Four', slug='four', parent=page1, template_name='standard') |
|
478 |
page1 = Page.objects.create(title='One', slug='one', template_name='standard')
|
|
479 |
page2 = Page.objects.create(title='Two', slug='two', parent=page1, template_name='standard')
|
|
480 |
page3 = Page.objects.create(title='Three', slug='three', parent=page2, template_name='standard')
|
|
481 |
page4 = Page.objects.create(title='Four', slug='four', parent=page1, template_name='standard')
|
|
480 | 482 |
random_list = [page3, page4, page1, page2] |
481 | 483 |
ordered_list = Page.get_as_reordered_flat_hierarchy(random_list) |
482 | 484 |
assert ordered_list[0] == page1 |
... | ... | |
484 | 486 |
assert ordered_list[2] == page2 |
485 | 487 |
assert ordered_list[3] == page3 |
486 | 488 | |
489 | ||
487 | 490 |
def test_site_export_import(app, admin_user): |
488 | 491 |
Page.objects.all().delete() |
489 | 492 |
page1 = Page(title='One', slug='one', template_name='standard') |
490 |
- |