1
Fork 0
mirror of https://github.com/Steffo99/sophon.git synced 2024-12-22 14:54:22 +00:00

📔 Projects, done.

This commit is contained in:
Steffo 2021-11-05 02:40:54 +01:00
parent 97fb2dfabf
commit e882416df6
2 changed files with 63 additions and 1 deletions

View file

@ -4,7 +4,6 @@ L'app sophon.core
.. default-role:: obj .. default-role:: obj
.. module:: sophon.core .. module:: sophon.core
L'app `sophon.core` è l'app principale del progetto, e non può essere disattivata, in quanto dipendenza obbligatoria di tutte le altre app. L'app `sophon.core` è l'app principale del progetto, e non può essere disattivata, in quanto dipendenza obbligatoria di tutte le altre app.
@ -267,6 +266,13 @@ Vengono definiti tre viewset in grado di utilizzare i metodi aggiunti dalle clas
Classe **astratta** che estende la classe base `.WriteSophonViewSet` estendendo gli ``hook_*`` con verifiche dei permessi dell'utente che tenta di effettuare l'azione. Classe **astratta** che estende la classe base `.WriteSophonViewSet` estendendo gli ``hook_*`` con verifiche dei permessi dell'utente che tenta di effettuare l'azione.
.. method:: get_group_from_serializer(self, serializer) -> models.ResearchGroup
:abstractmethod:
Metodo necessario a trovare il gruppo a cui apparterrà un oggetto prima che il suo serializzatore venga elaborato.
:param serializer: Il `~rest_framework.serializers.Serializer` già "riempito" contenente i dati dell'oggetto.
Viewset concreti Viewset concreti
^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^

View file

@ -4,3 +4,59 @@ L'app sophon.projects
.. default-role:: obj .. default-role:: obj
.. module:: sophon.projects .. module:: sophon.projects
L'app `sophon.projects` è un app secondaria che dipende da `sophon.core` che introduce in Sophon il concetto di :ref:`progetto di ricerca`.
.. caution::
Anche se l'app `sophon.projects` è opzionale (il progetto può funzionare senza di essa), si sconsiglia di disattivarla, in quanto il :ref:`modulo frontend` si aspetta che l'app sia attiva e solleverà un errore nel caso il viewset fornito da questa app non sia disponibile.
Modello del progetto di ricerca
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. module:: sophon.projects.models
Viene introdotto un modello concreto che rappresenta un :ref:`progetto di ricerca`.
.. class:: ResearchProject(SophonGroupModel)
.. attribute:: slug: SlugField
.. attribute:: group: ForeignKey → sophon.core.models.ResearchGroup
.. attribute:: name: CharField
.. attribute:: description: TextField
.. attribute:: visibility: CharField ["PUBLIC", "INTERNAL", "PRIVATE"]
Viewset del gruppo di ricerca
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. module:: sophon.projects.views
Da una base comune, vengono creati due viewset per interagire con i progetti di ricerca.
.. class:: ResearchProjectViewSet(SophonGroupViewSet, metaclass=abc.ABCMeta)
Classe **astratta** che effettua l'override di `~sophon.core.views.SophonGroupView.get_group_from_serializer` per entrambi i viewset che seguono.
.. class:: ResearchProjectsBySlugViewSet(ResearchProjectViewSet)
Viewset in lettura e scrittura che permette di interagire con tutti i progetti di ricerca a cui l'utente loggato ha accesso.
Accessibile all'URL :samp:`/api/projects/by-slug/{PROJECT_SLUG}/`.
.. class:: ResearchProjectsByGroupViewSet(ResearchProjectViewSet)
Viewset in lettura e scrittura che permette di interagire con i progetti di ricerca a cui l'utente loggato ha accesso, filtrati per il gruppo a cui appartengono.
Il filtraggio viene effettuato limitando il queryset.
Accessibile all'URL :samp:`/api/projects/by-group/{GROUP_SLUG}/{PROJECT_SLUG}/`.
Amministrazione del gruppo di ricerca
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. module:: sophon.projects.admin
Il modello `.models.ResearchProject` viene registrato nella pagina di amministrazione attraverso la seguente classe:
.. class:: ResearchProjectAdmin(sophon.core.admin.SophonAdmin)
Classe per la pagina di amministrazione che specifica un ordinamento, permette il filtraggio per gruppo di appartenenza e visibilità, e specifica i campi da visualizzare nell'elenco dei progetti.