From bb1dcdde45303a1313820a3f27eb595e758f83f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Cant=C3=B9?= Date: Tue, 21 May 2024 15:43:39 +0200 Subject: [PATCH] improve admin --- src/genlab_bestilling/admin.py | 130 ++++++++++++++++++++++++++++++-- src/genlab_bestilling/models.py | 19 +---- 2 files changed, 127 insertions(+), 22 deletions(-) diff --git a/src/genlab_bestilling/admin.py b/src/genlab_bestilling/admin.py index 38e8cc6..e04b56b 100644 --- a/src/genlab_bestilling/admin.py +++ b/src/genlab_bestilling/admin.py @@ -1,34 +1,150 @@ from django.contrib import admin from unfold.admin import ModelAdmin -from .models import AnalysisType, Area, EquipmentType, Marker, SampleType, Species +from .models import ( + AnalysisOrder, + AnalysisType, + Area, + EquimentOrderQuantity, + EquipmentOrder, + EquipmentType, + GenLabProject, + Location, + Marker, + Order, + Organization, + Sample, + SampleType, + Species, +) @admin.register(Area) class AreaAdmin(ModelAdmin): - pass + search_fields = ["name"] @admin.register(Marker) class MarkerAdmin(ModelAdmin): - pass + search_fields = ["name"] @admin.register(Species) class SpeciesAdmin(ModelAdmin): - pass + list_display = ["name", "area"] + list_filter = ["area"] + search_fields = ["name"] + + autocomplete_fields = ["markers", "area"] @admin.register(SampleType) class SampleTypeAdmin(ModelAdmin): - pass + search_fields = ["name"] @admin.register(AnalysisType) class AnalysisTypeAdmin(ModelAdmin): - pass + search_fields = ["name"] @admin.register(EquipmentType) class EquipmentTypeAdmin(ModelAdmin): - pass + list_display = ["name", "unit"] + list_filter = ["unit"] + search_fields = ["name"] + + +@admin.register(Organization) +class OrganizationAdmin(ModelAdmin): + list_display = ["name"] + search_fields = ["name"] + + +@admin.register(Location) +class LocationAdmin(ModelAdmin): + list_display = ["name"] + search_fields = ["name"] + + +@admin.register(GenLabProject) +class GenLabProjectAdmin(ModelAdmin): + list_display = [ + "name", + "project", + "verified", + "samples_owner", + "area", + "analysis_timerange", + ] + search_fields = ["name"] + + autocomplete_fields = [ + "samples_owner", + "area", + "species", + "sample_types", + "analysis_types", + ] + + +@admin.register(Order) +class OrderAdmin(ModelAdmin): + list_display = [ + "id", + "project", + ] + search_fields = ["id", "project"] + + autocomplete_fields = [ + "project", + "species", + "sample_types", + ] + + +class EquimentOrderQuantityInline(admin.TabularInline): + model = EquimentOrderQuantity + autocomplete_fields = ["equipment"] + + +@admin.register(EquipmentOrder) +class EquipmentOrderAdmin(ModelAdmin): + list_display = [ + "id", + "project", + ] + search_fields = ["id", "project"] + + autocomplete_fields = [ + "project", + "species", + "sample_types", + ] + + inlines = [EquimentOrderQuantityInline] + + +@admin.register(AnalysisOrder) +class AnalysisOrderAdmin(ModelAdmin): + list_display = [ + "id", + "project", + ] + search_fields = ["id", "project"] + + autocomplete_fields = ["project", "species", "sample_types", "markers"] + + +@admin.register(Sample) +class SampleAdmin(ModelAdmin): + list_display = [ + "order", + "guid", + "type", + "species", + ] + search_fields = [] + readonly_fields = ["order"] + + autocomplete_fields = ["species", "markers", "area", "location", "type"] diff --git a/src/genlab_bestilling/models.py b/src/genlab_bestilling/models.py index 9093ab8..b2984c5 100644 --- a/src/genlab_bestilling/models.py +++ b/src/genlab_bestilling/models.py @@ -4,18 +4,6 @@ from polymorphic.models import PolymorphicModel -class NINAProject(models.Model): - """ - A NINA project, is unique, manages permissions - """ - - name = models.CharField(max_length=255, null=True, blank=True) - id = models.BigIntegerField(primary_key=True, verbose_name=_("Project number")) - - def __str__(self) -> str: - return self.name - - class Organization(models.Model): name = models.CharField(max_length=255) @@ -83,9 +71,7 @@ class GenLabProject(models.Model): name = models.CharField(max_length=255, null=True, blank=True) # external projects without project code? how to handle them? - project = models.ForeignKey( - "NINAProject", on_delete=models.DO_NOTHING, null=True, blank=True - ) + project = models.BigIntegerField(verbose_name=_("Project number")) verified = models.BooleanField(default=False) samples_owner = models.ForeignKey( "Organization", on_delete=models.PROTECT, blank=True, null=True @@ -97,6 +83,9 @@ class GenLabProject(models.Model): expected_total_samples = models.IntegerField(null=True, blank=True) analysis_timerange = DateRangeField(null=True, blank=True) + def __str__(self): + return self.name + class Order(PolymorphicModel): project = models.ForeignKey("GenLabProject", on_delete=models.CASCADE)