Adiciona filtro de coleção na listagem administrativa de Articles#946
Adiciona filtro de coleção na listagem administrativa de Articles#946
Conversation
Agent-Logs-Url: https://github.com/scieloorg/scms-upload/sessions/c7702935-ad01-4591-ac3a-c00c8138e65e Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Adiciona suporte a Coleção na listagem administrativa de Snippets > Articles > Articles, permitindo exibição em coluna, filtro lateral e busca por atributos da coleção via relacionamento indireto Article.journal -> JournalCollection.collection.
Changes:
- Inclui
display_collectionsemlist_displaypara exibir acrônimos das coleções associadas ao journal do artigo. - Adiciona filtro por coleção via
journal__journal_collections__collectione ampliasearch_fieldsparacollection__acronecollection__name. - Cria a property
Article.display_collectionspara renderização do valor na listagem.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| article/wagtail_hooks.py | Adiciona coluna, filtro e campos de busca para Coleção na listagem do snippet de Article. |
| article/models.py | Implementa display_collections para obter e formatar os acrônimos das coleções do journal do artigo. |
| acrons = ( | ||
| self.journal.journal_collections.filter(collection__isnull=False) | ||
| .values_list("collection__acron", flat=True) | ||
| .distinct() | ||
| ) | ||
| return ", ".join(sorted(a for a in acrons if a)) |
| def display_collections(self): | ||
| if not self.journal_id: | ||
| return "" | ||
| acrons = ( | ||
| self.journal.journal_collections.filter(collection__isnull=False) | ||
| .values_list("collection__acron", flat=True) | ||
| .distinct() | ||
| ) | ||
| return ", ".join(sorted(a for a in acrons if a)) |
|
@copilot verifique se journal e issue tem property que retornam as coleções vinculadas. Se Journal e Issue não os tem, crie para Journal e Issue uma property que retorne nome ou acron das coleções a quais estão vinculados |
Agent-Logs-Url: https://github.com/scieloorg/scms-upload/sessions/84cef245-ecea-4e1f-aeb4-e95c5a9c038b Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Verifiquei: nem |
|
@copilot a collection pode ser obtida acessando o ArticleProc / IssueProc / JournalProc vinculados |
Agent-Logs-Url: https://github.com/scieloorg/scms-upload/sessions/c177f905-af17-4fff-a384-465553edcd37 Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Atualizado em 23d9c75:
|
|
@copilot pode ser mais simples, veja Para Issue: @property
def collections(self):
from collection.models import Collection
return Collection.objects.filter(
issueproc__issue=self,
).distinct()
@property
def collections_acron(self):
from collection.models import Collection
return list(
Collection.objects.filter(
issueproc__issue=self,
)
.values_list("acron", flat=True)
.distinct()
.order_by("acron")
)
@property
def collections_name(self):
from collection.models import Collection
return list(
Collection.objects.filter(
issueproc__issue=self,
)
.values_list("name", flat=True)
.distinct()
.order_by("name")
) |
Agent-Logs-Url: https://github.com/scieloorg/scms-upload/sessions/09f92a0c-258b-4e00-9a78-ec0b96bd824f Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Aplicado em e801e3e — properties de |
|
@copilot veja como foi feito para Issue e faça análogo para Article e Journal |
Agent-Logs-Url: https://github.com/scieloorg/scms-upload/sessions/4f08e8a9-3391-4807-9376-95eaa2d1f30e Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Aplicado em 310c9f5 — adicionei em |
O que esse PR faz?
Adiciona a coluna e o filtro de Coleção na listagem administrativa de
Articles > Articles, permitindo identificar a qual coleção cada registro pertence, filtrar por coleção e combinar esse filtro com os demais (journal, status) e com a caixa de busca. Adicionalmente, expõe properties reutilizáveis de coleções vinculadas emArticle,JournaleIssue, todas resolvidas via reverse FK lookup emCollectiona partir dos respectivos*Proc(ArticleProc,JournalProc,IssueProc).Onde a revisão poderia começar?
article/wagtail_hooks.py—ArticleSnippetViewSet(list_display, list_filter, search_fields)article/models.py— novas propertiesArticle.collections,Article.collections_acron,Article.collections_nameeArticle.display_collectionsjournal/models.py— novas propertiesJournal.collections,Journal.collections_acron,Journal.collections_nameissue/models.py— novas propertiesIssue.collections,Issue.collections_acron,Issue.collections_nameComo este poderia ser testado manualmente?
Admin > Snippets > Articles > Articles.ArticleProc).article.collections,article.collections_acron,article.collections_namejournal.collections,journal.collections_acron,journal.collections_nameissue.collections,issue.collections_acron,issue.collections_nameAlgum cenário de contexto que queira dar?
Articlenão possui FK direta paraCollection. A coleção é obtida a partir do*Proccorrespondente, que já mantém uma FK direta paraCollection:Article→sps_pkg→ArticleProc.collectionIssue→IssueProc.collectionJournal→JournalProc.collectionPortanto:
list_filteresearch_fieldsdoArticleSnippetViewSetusam o lookupsps_pkg__articleproc__collection(em vez dejournal__journal_collections__collection).Journal.collections*consultamCollection.objects.filter(journalproc__journal=self).Issue.collections*consultamCollection.objects.filter(issueproc__issue=self)(não delegam ao journal — um issue pode ter sua própria associação via proc).Article.collections*consultamCollection.objects.filter(articleproc__sps_pkg=self.sps_pkg), seguindo o mesmo padrão deIssueeJournal.Article.display_collectionsreutilizacollections_acronpara formatar os acrônimos ordenados.As properties
*_acrone*_nameretornam listas ordenadas (viaorder_byno banco) e usam.distinct()para evitar duplicatas. Oget_querysetexistente do viewset também aplica.distinct(), evitando duplicatas geradas pelo JOIN.Pontos a avaliar na revisão:
display_collectionsfaz uma query por linha. Se desejado, pode-se adicionarprefetch_related("sps_pkg__articleproc_set__collection")emget_queryset.Screenshots
N/A (mudanças requerem ambiente Wagtail com dados para visualização).
Quais são tickets relevantes?
Issue referenciada nos comentários do PR.
Referências
proc/wagtail_hooks.py(ArticleProcViewSet), que já utilizacollectionemlist_filter.display_sectionsemarticle/models.pycomo modelo paradisplay_collections.