kopia lustrzana https://github.com/wagtail/wagtail
Prevent error when searching and filtering by locale (#12772)
Ref: https://github.com/wagtail/wagtail/issues/6616#issuecomment-2590737050 The current locale filter logic performs a related field filter on `locale__language_code` which isn't supported when searching, as per #6616. Change this to look up the locale object in a separate query.pull/12783/head
rodzic
b2958e2b4c
commit
7e1832a4eb
|
@ -52,6 +52,7 @@ Changelog
|
|||
* Fix: Add missing heading and breadcrumbs in Account view (Sage Abdullah)
|
||||
* Fix: Reduce confusing spacing below StreamField blocks help text (Rishabh Sharma)
|
||||
* Fix: Prevent redundant calls to `Site.find_for_request()` from `Page.get_url_parts()` (Andy Babic)
|
||||
* Fix: Prevent error on listings when searching and filtering by locale (Matt Westcott, Sage Abdullah)
|
||||
* Docs: Move the model reference page from reference/pages to the references section as it covers all Wagtail core models (Srishti Jaiswal)
|
||||
* Docs: Move the panels reference page from references/pages to the references section as panels are available for any model editing, merge panels API into this page (Srishti Jaiswal)
|
||||
* Docs: Move the tags documentation to standalone advanced topic, instead of being inside the reference/pages section (Srishti Jaiswal)
|
||||
|
|
|
@ -65,6 +65,7 @@ depth: 1
|
|||
* Add missing heading and breadcrumbs in Account view (Sage Abdullah)
|
||||
* Reduce confusing spacing below StreamField blocks help text (Rishabh Sharma)
|
||||
* Prevent redundant calls to `Site.find_for_request()` from `Page.get_url_parts()` (Andy Babic)
|
||||
* Prevent error on listings when searching and filtering by locale (Matt Westcott, Sage Abdullah)
|
||||
|
||||
### Documentation
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ from wagtail.admin.models import popular_tags_for_model
|
|||
from wagtail.admin.utils import get_user_display_name
|
||||
from wagtail.admin.widgets import AdminDateInput, BooleanRadioSelect, FilteredSelect
|
||||
from wagtail.coreutils import get_content_languages, get_content_type_label
|
||||
from wagtail.models import Locale
|
||||
|
||||
|
||||
class DateRangePickerWidget(SuffixedMultiWidget):
|
||||
|
@ -93,7 +94,8 @@ class FilteredModelChoiceFilter(django_filters.ModelChoiceFilter):
|
|||
class LocaleFilter(django_filters.ChoiceFilter):
|
||||
def filter(self, qs, language_code):
|
||||
if language_code:
|
||||
return qs.filter(locale__language_code=language_code)
|
||||
locale = Locale.objects.filter(language_code=language_code)
|
||||
return qs.filter(locale_id=locale.values_list("pk", flat=True)[:1])
|
||||
return qs
|
||||
|
||||
|
||||
|
|
|
@ -653,6 +653,24 @@ class TestPageExplorer(WagtailTestUtils, TestCase):
|
|||
self.assertIn("Simple page", page_type_labels)
|
||||
self.assertNotIn("Page", page_type_labels)
|
||||
|
||||
@override_settings(WAGTAIL_I18N_ENABLED=True)
|
||||
def test_filter_by_locale_and_search(self):
|
||||
fr_locale = Locale.objects.create(language_code="fr")
|
||||
self.root_page.copy_for_translation(fr_locale, copy_parents=True)
|
||||
|
||||
response = self.client.get(
|
||||
reverse("wagtailadmin_explore", args=(self.root_page.id,)),
|
||||
{"locale": "en", "q": "hello"},
|
||||
)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
page_ids = {page.id for page in response.context["pages"]}
|
||||
self.assertIn(self.child_page.id, page_ids)
|
||||
self.assertContainsActiveFilter(
|
||||
response,
|
||||
"Locale: English",
|
||||
"locale=en",
|
||||
)
|
||||
|
||||
def test_filter_by_date_updated(self):
|
||||
new_page_child = SimplePage(
|
||||
title="New page child",
|
||||
|
|
Ładowanie…
Reference in New Issue