feat(bpp): Szukaj zapytaniem — interaktywny widok DjangoQL poza adminem#223
Merged
Conversation
…inem Nowy widok /zapytanie/ (dla superuserow i grupy "wprowadzanie danych") pozwala przeszukiwac modele Rekord i Autor zapytaniami DjangoQL z autocompletem, podpowiedziami pozycjonowanymi u stop kursora tekstowego, historia 20 roznych zapytan w localStorage z restore'em po kliknieciu oraz paginacja nad i pod tabela wynikow. Endpointy zapytanie/introspect/<model>/ i zapytanie/suggestions/<model>/ delegacja do djangoql.DjangoQLSchema / SuggestionsAPIView pod tym samym mixinem uprawnien co main view. UI: badge "beta" + callout "podglad technologiczny", button-group wyboru modelu (CSS-only przez :has(input:checked)), monospace textarea, TAB-completion przez capture-listener zarejestrowany przed DjangoQL.init, popup repositioning przez mirror-div + MutationObserver (BPP body ma position:relative+min-height:100vh wiec djangoql default psul layout). Wpis "zapytaniem" w menu "szukaj" z ikona fi-database. 14 testow pokrywajacych uprawnienia, parsowanie zapytania, rozbicie po modelach (rekord/autor) i obsluge bledu skladni. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Ruff w CI wykryl brak explicit exception chaining przy konwersji KeyError -> Http404 w _resolve_model_or_404. Pierwotny KeyError nie wnosi nic do UX — Http404 jest finalnym typem bledu (zly model_key w URL-u). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…adni
Przyklady zapytan:
- Wyniesione do EXAMPLES w views/zapytanie.py (3 poziomy trudnosci x
2 modele x 5-10 przykladow). Single source of truth zamiast zahardkodowanych
list w template.
- Template renderuje przez {% for level in examples %} loop — kazdy <code>
klikalny, ustawia textarea + przelacza radio modelu.
- Naprawione 3 niepoprawne skladniowo przyklady DjangoQL:
* not (charakter_formalny.skrot = "AC") -> charakter_formalny.skrot != "AC"
* not (orcid startswith "0000-") -> orcid not startswith "0000-"
* not (tytul.skrot in (...)) -> tytul.skrot not in (...)
DjangoQL grammar nie wspiera unary `not (expr)` — NOT jest tylko modifier
dla NOT STARTSWITH / NOT ENDSWITH / NOT IN.
Wyniki — nowy layout dla Rekord:
- Kolumny: Reprezentacja | ID | Akcje (ID przeniesione na 2. miejsce).
- ID jako `pk[0]-pk[1]` (np. "12-345") zamiast tuple notation "(12, 345)".
- Caly wiersz klikalny (<tr data-href>), klik na inner <a>/<button> nie
intercepted.
- Link "Edytuj" do admina prebuildowany w view (ContentType.get_for_id
cached, NoReverseMatch fallback) — rozkminia content_type_id z pk[0]
i odsyla do change view konkretnego podtypu (Wydawnictwo_Ciagle, Patent,
etc).
Testy (44 nowe, 58/58 zielone):
- test_zapytanie_examples_are_valid_djangoql (parametrized, 42 cases) —
parsuje kazdy przyklad przez DjangoQLParser i fail-uje z dokladnym opisem.
- test_zapytanie_examples_cover_both_models — sanity check.
- test_zapytanie_examples_no_unary_not — regression guard.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
/zapytanie/dla superuserów i grupywprowadzanie danych— pełny DjangoQL nad modelamiRekordiAutorpoza Django adminem.zapytanie/introspect/<model>/+zapytanie/suggestions/<model>/(delegacja dodjangoql.DjangoQLSchema/SuggestionsAPIView).position: fixedwymuszone bo BPP body maposition:relative + min-height:100vh).DjangoQL.init— kolejność rejestracji w fazie AT_TARGET decyduje).localStoragez licznikiem wyników i restore'em po kliknięciu.UI
:has(input:checked)).{% include _zapytanie_pager.html %}).obj.opis_bibliograficzny_cache|safe(kursywy, linki).in (...).fi-database.Test plan
pytest src/bpp/tests/test_zapytanie.py(14 testów — lokalnie green).tytul_oryginalny ~ "rak"na Rekord — wyniki + opis bibliograficzny z formatowaniem.model+query, "Wyczyść" działa.🤖 Generated with Claude Code