Skip to content

Fix get_queryset(request) → get_queryset() in SnippetViewSet subclasses#1420

Open
Copilot wants to merge 2 commits intomainfrom
copilot/fix-get-queryset-method
Open

Fix get_queryset(request) → get_queryset() in SnippetViewSet subclasses#1420
Copilot wants to merge 2 commits intomainfrom
copilot/fix-get-queryset-method

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Mar 24, 2026

O que esse PR faz?

Corrige a assinatura get_queryset(self, request) (padrão ModelAdmin) para get_queryset(self) (padrão SnippetViewSet) em todas as subclasses de SnippetViewSet.

No Wagtail SnippetViewSet, get_queryset() não recebe request — usa self.request internamente. Passar request fazia super().get_queryset(request) retornar None em vez de um QuerySet.

# ANTES (ModelAdmin)
def get_queryset(self, request):
    return super().get_queryset(request).filter(...)

# DEPOIS (SnippetViewSet)
def get_queryset(self):
    return super().get_queryset().filter(...)

Classes corrigidas:

  • core/wagtail_hooks.pyLicenseViewSet
  • journal/wagtail_hooks.pyFilteredJournalQuerysetMixin, JournalAdminOnlySnippetViewSet, SciELOJournalAdminViewSet, CrossmarkPolicyAdmin
  • location/wagtail_hooks.pyLocationAdmin
  • issue/wagtail_hooks.pyIssueAdminSnippetViewSet
  • thematic_areas/wagtail_hooks.pyGenericThematicAreaAdmin, GenericThematicAreaFileAdmin, ThematicAreaAdmin, ThematicAreaFileAdmin
  • article/models.py + article/wagtail_hooks.py — movido get_queryset do proxy model ArticlePeerReviewStats para ArticlePeerReviewStatsSnippetViewSet

django_celery_beat/wagtail_hooks.py não foi alterado pois ainda usa ModelAdmin.

Onde a revisão poderia começar?

journal/wagtail_hooks.py — contém os casos mais complexos com FilteredJournalQuerysetMixin e múltiplas ViewSets que usam self.request.user para filtragem por permissão.

Como este poderia ser testado manualmente?

  1. Acessar o admin do Wagtail
  2. Navegar para qualquer listagem de Snippets afetada (Journals, Issues, SciELO Journals, Licenses, Locations, Thematic Areas, Crossmark Policies, Peer Review Stats)
  3. Verificar que a listagem carrega corretamente (antes retornava erro ou lista vazia por None)
  4. Verificar que filtros de permissão por usuário/coleção continuam funcionando

Algum cenário de contexto que queira dar?

Na migração de ModelAdmin para SnippetViewSet, a assinatura de get_queryset mudou. O SnippetViewSet do Wagtail não recebe request como argumento — ele usa self.request internamente. Quando se chama super().get_queryset(request), o Wagtail interpreta esse request de forma inesperada e retorna None.

Screenshots

N/A — correção de backend sem impacto visual.

Quais são tickets relevantes?

N/A

Referências

Original prompt

This section details on the original issue you should resolve

<issue_title>Trocar get_queryset(request), usado com ModelAdmin, por get_queryset() se estiver usando Snippets</issue_title>
<issue_description>### Descrição da tarefa

Corrigir o padrão get_queryset(request). usado com ModelAdmin, removendo o request para usar com Snippets.

return super().get_queryset(request).filter(**params)

O super().get_queryset(request) está retornando None em vez de um QuerySet.

Isso acontece porque, na migração de ModelAdmin para SnippetViewSet, a assinatura do método get_queryset mudou. No SnippetViewSet do Wagtail, o método get_queryset da view não recebe request como argumento — ele usa self.request internamente. Quando você chama super().get_queryset(request), o Wagtail interpreta esse request de forma inesperada e retorna None.

O fix provável é ajustar a chamada ao super(). Sem ver o código completo, mas baseado no padrão da migração que você tem feito, deve ser algo assim:

# ANTES (padrão ModelAdmin)
def get_queryset(self, request):
    return super().get_queryset(request).filter(**params)

# DEPOIS (padrão SnippetViewSet)
def get_queryset(self):
    return super().get_queryset().filter(**params)

Se você precisar do request para montar os params (por exemplo, filtrar por usuário), use self.request dentro do método.
</issue_description>

Comments on the Issue (you are @copilot in this section)


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Migrated from ModelAdmin pattern (get_queryset(self, request)) to
SnippetViewSet pattern (get_queryset(self)) across all SnippetViewSet
subclasses. Replaced request.user with self.request.user and
super().get_queryset(request) with super().get_queryset().

Also moved misplaced get_queryset from ArticlePeerReviewStats model
to ArticlePeerReviewStatsSnippetViewSet where it belongs.

Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Agent-Logs-Url: https://github.com/scieloorg/core/sessions/24f67e11-b3c3-46ee-b6cf-2958974642c8
Copilot AI changed the title [WIP] Fix get_queryset method for SnippetViewSet Fix get_queryset(request) → get_queryset() in SnippetViewSet subclasses Mar 24, 2026
Copilot AI requested a review from robertatakenaka March 24, 2026 19:48
@robertatakenaka robertatakenaka marked this pull request as ready for review March 24, 2026 20:19
Copilot AI review requested due to automatic review settings March 24, 2026 20:19
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Corrige a assinatura de get_queryset em subclasses de SnippetViewSet para o padrão do Wagtail (get_queryset(self) usando self.request), evitando que chamadas a super().get_queryset(request) retornem None e quebrem listagens de snippets no admin.

Changes:

  • Atualiza get_queryset(self, request)get_queryset(self) em vários SnippetViewSet, trocando request.user por self.request.user quando necessário.
  • Ajusta chamadas a super().get_queryset() para não receber request.
  • Move a lógica de queryset otimizado do proxy ArticlePeerReviewStats para o ArticlePeerReviewStatsSnippetViewSet.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
thematic_areas/wagtail_hooks.py Ajusta get_queryset() em viewsets de Thematic Areas para assinatura correta do SnippetViewSet.
location/wagtail_hooks.py Ajusta get_queryset() do LocationAdmin removendo request e mantendo otimizações.
journal/wagtail_hooks.py Corrige assinatura/uso de request em mixin e viewsets (incluindo filtros por permissões via self.request.user).
issue/wagtail_hooks.py Corrige assinatura/uso de request no queryset do admin de Issues.
core/wagtail_hooks.py Corrige assinatura do LicenseViewSet.get_queryset() para padrão SnippetViewSet.
article/wagtail_hooks.py Adiciona get_queryset() otimizado no ArticlePeerReviewStatsSnippetViewSet.
article/models.py Remove get_queryset do proxy model ArticlePeerReviewStats (migração da responsabilidade para o ViewSet).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +231 to +233
'doi',
'titles',
'languages',
Copy link

Copilot AI Mar 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

get_queryset() is prefetching the M2M relations (doi, titles, languages) for every page of the listing. This adds extra queries and can pull additional rows even though these relations aren’t used in list_display/filters here; consider dropping these prefetch_related() calls (or limiting them to what the list actually needs) to keep the admin listing lighter.

Suggested change
'doi',
'titles',
'languages',
'titles',

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Trocar get_queryset(request), usado com ModelAdmin, por get_queryset() se estiver usando Snippets

3 participants