Example #1
0
class CommunityAreaAdmin(AreaEncounterAdmin):
    """Admin for CommunityArea."""

    # Change list
    list_display = AreaEncounterAdmin.list_display + ["community"]
    list_filter = AreaEncounterAdmin.list_filter + ["community"]
    list_select_related = ["community"]
    show_full_result_count = False
    resource_class = occ_resources.CommunityAreaEncounterResource

    # Change view
    form = s2form(occ_models.CommunityAreaEncounter, attrs=S2ATTRS)
    formfield_overrides = FORMFIELD_OVERRIDES
    autocomplete_fields = AreaEncounterAdmin.autocomplete_fields + ["community"]
    fieldsets = ((_('Community'), {
        'classes': ('grp-collapse', 'grp-open', 'wide', 'extrapretty'),
        'fields': ("community", )}
    ),) + AreaEncounterAdmin.fieldsets
    inlines = [
        CustomStateLogInline,
        FileAttachmentInline,
        HabitatCompositionInline,
        AreaAssessmentInline,
        HabitatConditionInline,
        FireHistoryInline,
        VegetationClassificationInline,
        AssociatedSpeciesInline,
        PhysicalSampleInline
    ]
Example #2
0
class ConservationCriterionInline(admin.TabularInline):
    """Inline admin for ConservationCriterion."""

    extra = 1
    model = cons_models.ConservationCriterion
    classes = ("grp-collapse grp-closed wide extrapretty",)
    form = s2form(cons_models.ConservationCriterion, attrs=S2ATTRS)
Example #3
0
class FileAttachmentInline(GenericTabularInline):
    """Inline for FileAttachment."""

    model = cons_models.FileAttachment
    form = s2form(cons_models.FileAttachment, attrs=S2ATTRS)
    extra = 1
    classes = ("grp-collapse grp-closed wide extrapretty",)
Example #4
0
class AreaEncounterAdmin(FSMTransitionMixin, ImportExportModelAdmin, VersionAdmin):
    """Admin for Area."""

    # Change list
    list_display = ["encounter_type", "area_type", "code", "name", "source", "source_id", "status", ]
    list_filter = ["encounter_type", "area_type", "source", "status", "geolocation_capture_method"]
    search_fields = ("code", "name", )
    date_hierarchy = 'encountered_on'

    # Change view
    form = s2form(occ_models.AreaEncounter, attrs=S2ATTRS)
    formfield_overrides = FORMFIELD_OVERRIDES
    fsm_field = ['status', ]
    autocomplete_fields = ['encountered_by', ]
    fieldsets = (
        (_('Details'), {
            'classes': ('grp-collapse', 'grp-open', 'wide', 'extrapretty'),
            'fields': ("encounter_type", "area_type", "code", "name", "description",)}
         ),
        (_('Location'), {
            'classes': ('grp-collapse', 'grp-open', 'wide', 'extrapretty'),
            'fields': ("geom", "point", "accuracy", "geolocation_capture_method")}
         ),
        (_('Data lineage'), {
            'classes': ('grp-collapse', 'grp-open', 'wide', 'extrapretty'),
            'fields': ("source", "source_id", "encountered_on", "encountered_by")}
         ),
    )
    inlines = [CustomStateLogInline, ]
Example #5
0
class ConservationActionInline(admin.TabularInline):
    """Inline admin for Management Action."""

    extra = 1
    model = cons_models.ConservationAction
    form = s2form(cons_models.ConservationAction, attrs=S2ATTRS)
    formfield_overrides = FORMFIELD_OVERRIDES
    classes = ("grp-collapse grp-closed wide extrapretty",)
Example #6
0
class ConservationActivityInline(admin.TabularInline):
    """Inline admin for ConservationActivity."""

    extra = 1
    model = cons_models.ConservationActivity
    form = s2form(cons_models.ConservationActivity, attrs=S2ATTRS)
    formfield_overrides = FORMFIELD_OVERRIDES
    classes = ("grp-collapse grp-open wide extrapretty",)
Example #7
0
class DocumentAdmin(FSMTransitionMixin, VersionAdmin):
    """Admin for Document."""

    save_on_top = True
    date_hierarchy = "effective_from"

    # FSM Transitions
    fsm_field = ["status", ]

    # List View
    list_display = (
        "source",
        "source_id",
        "document_type",
        "title",
        "effective_from",
        "effective_to",
        "effective_from_commonwealth",
        "effective_to_commonwealth",
        "last_reviewed_on",
        "review_due",
    )
    list_filter = (
        # "taxa",
        # "communities",
        "source",
        "document_type",
        "status",
        ("effective_from", admin.DateFieldListFilter),
        ("effective_to", admin.DateFieldListFilter),
        ("last_reviewed_on", admin.DateFieldListFilter),
        ("review_due", admin.DateFieldListFilter),
        ("effective_from_commonwealth", admin.DateFieldListFilter),
        ("effective_to_commonwealth", admin.DateFieldListFilter),
    )
    search_fields = ("title", "source_id", )

    # Detail View
    form = s2form(cons_models.Document, attrs=S2ATTRS)
    formfield_overrides = FORMFIELD_OVERRIDES
    inlines = [
        # ConservationActionInline, # throws admin.E028
        CustomStateLogInline,
        FileAttachmentInline, ]

    fieldsets = (
        ("Scope", {
            "classes": ("grp-collapse", "grp-open", "wide", "extrapretty"),
            "fields": ("document_type", "title", "taxa", "communities", "team",)}
         ),
        ("Approval milestones and log", {
            "classes": ("grp-collapse", "grp-closed", "wide", "extrapretty"),
            "fields": ("effective_from", "effective_to",
                       "effective_from_commonwealth", "effective_to_commonwealth",
                       "last_reviewed_on", "review_due", "comments")}
         ),
    )
Example #8
0
class ConservationActionCategoryAdmin(VersionAdmin):
    """Admin for Conservation Management Actions."""

    model = cons_models.ConservationActionCategory
    form = s2form(cons_models.ConservationActionCategory, attrs=S2ATTRS)
    prepopulated_fields = {"code": ("label",)}
    list_display = ("code", "label", "description",)
    search_fields = ("code", "label", "description")
    save_on_top = True
Example #9
0
class TurtleNestEncounterAdmin(EncounterAdmin):
    """Admin for TurtleNestEncounter."""

    form = s2form(TurtleNestEncounter, attrs=S2ATTRS)
    list_display = EncounterAdmin.FIRST_COLS + (
        'age_display', 'type_display', 'species', 'habitat_display',
        'disturbance', 'comments') + EncounterAdmin.LAST_COLS
    list_select_related = True
    list_filter = EncounterAdmin.list_filter + (
        'nest_age',
        'nest_type',
        'species',
        'habitat',
        'disturbance',
        'nest_tagged',
        'logger_found',
        'eggs_counted',
        'hatchlings_measured',
        'fan_angles_measured',
    )
    fieldsets = EncounterAdmin.fieldsets + (('Nest', {
        'classes': ('grp-collapse', 'grp-open', 'wide', 'extrapretty'),
        'fields':
        ('nest_age', 'nest_type', 'species', 'habitat', 'disturbance',
         'nest_tagged', 'logger_found', 'eggs_counted', 'hatchlings_measured',
         'fan_angles_measured', 'comments')
    }), )
    inlines = [
        MediaAttachmentInline, NestTagObservationInline,
        TurtleNestObservationInline, TurtleNestDisturbanceObservationInline,
        HatchlingMorphometricObservationInline,
        TurtleHatchlingEmergenceObservationInline,
        TurtleHatchlingEmergenceOutlierObservationInline,
        LightSourceObservationObservationInline, CustomStateLogInline
    ]

    def habitat_display(self, obj):
        """Make habitat human readable."""
        return obj.get_habitat_display()

    habitat_display.short_description = 'Habitat'

    def age_display(self, obj):
        """Make nest age human readable."""
        return obj.get_nest_age_display()

    age_display.short_description = 'Nest age'

    def type_display(self, obj):
        """Make nest type human readable."""
        return obj.get_nest_type_display()

    type_display.short_description = 'Nest type'
Example #10
0
class AreaAdmin(admin.ModelAdmin):
    """Area admin."""

    list_display = (
        "area_type",
        "name",
        "northern_extent",
        "centroid",
    )
    list_filter = ("area_type", )
    search_fields = ("name__icontains", )
    form = s2form(Area, attrs=S2ATTRS)
    formfield_overrides = FORMFIELD_OVERRIDES
Example #11
0
class LoggerEncounterAdmin(EncounterAdmin):
    """Admin for LoggerEncounter."""

    form = s2form(LoggerEncounter, attrs=S2ATTRS)
    list_display = EncounterAdmin.FIRST_COLS + (
        'logger_type_display',
        'deployment_status_display',
        'logger_id',
        'comments',
    ) + EncounterAdmin.LAST_COLS
    list_select_related = (
        'area',
        'site',
        'survey',
    )
    list_filter = EncounterAdmin.list_filter + \
        ('logger_type', 'deployment_status',)
    search_fields = ('logger_id', 'source_id')
    fieldsets = EncounterAdmin.fieldsets + (('Logger', {
        'classes': ('grp-collapse', 'grp-open', 'wide', 'extrapretty'),
        'fields': (
            'logger_type',
            'deployment_status',
            'logger_id',
            'comments',
        )
    }), )
    inlines = [
        MediaAttachmentInline, TagObservationInline, NestTagObservationInline,
        TemperatureLoggerSettingsInline, DispatchRecordInline,
        TemperatureLoggerDeploymentInline, CustomStateLogInline
    ]

    def logger_type_display(self, obj):
        """Make habitat human readable."""
        return obj.get_logger_type_display()

    logger_type_display.short_description = 'Logger Type'

    def deployment_status_display(self, obj):
        """Make habitat human readable."""
        return obj.get_deployment_status_display()

    deployment_status_display.short_description = 'Deployment Status'
Example #12
0
class ConservationListAdmin(VersionAdmin):
    """Admin for ConservationList."""

    save_on_top = True
    date_hierarchy = "active_to"

    # List View
    list_display = (
        "code",
        "label",
        "description",
        "active_from",
        "active_to",
        "scope_wa",
        "scope_cmw",
        "scope_intl",
        "scope_species",
        "scope_communities",
        "approval_level",
    )
    list_filter = ("scope_wa",
                   "scope_cmw",
                   "scope_intl",
                   "scope_species",
                   "scope_communities",
                   "approval_level",)
    search_fields = ("code", "label", "description", )
    fieldsets = (
        ("Details", {"fields": ("code", "label", "description",)}),
        ("Scope", {
            "classes": ("grp-collapse", "grp-closed", "wide"),
            "fields": ("active_from", "active_to",
                       "scope_wa", "scope_cmw", "scope_intl",
                       "scope_species", "scope_communities", "approval_level",)

        }),
    )
    form = s2form(cons_models.ConservationList, attrs=S2ATTRS)
    formfield_overrides = FORMFIELD_OVERRIDES
    inlines = [ConservationCategoryInline,
               ConservationCriterionInline,
               FileAttachmentInline]
Example #13
0
class LineTransectEncounterAdmin(EncounterAdmin):
    """Admin for LineTransectEncounter."""

    form = s2form(LineTransectEncounter, attrs=S2ATTRS)
    list_display = EncounterAdmin.FIRST_COLS + (
        'transect', ) + EncounterAdmin.LAST_COLS
    list_select_related = (
        'area',
        'site',
        'survey',
    )
    # list_filter = EncounterAdmin.list_filter + ()
    fieldsets = EncounterAdmin.fieldsets + (('Location', {
        'classes': ('grp-collapse', 'grp-open', 'wide', 'extrapretty'),
        'fields': ('transect', )
    }), )
    inlines = [
        TrackTallyObservationInline,
        TurtleNestDisturbanceTallyObservationInline, CustomStateLogInline
    ]
Example #14
0
class AnimalEncounterAdmin(EncounterAdmin):
    """Admin for AnimalEncounter."""

    form = s2form(AnimalEncounter, attrs=S2ATTRS)
    list_display = EncounterAdmin.FIRST_COLS + (
        'taxon',
        'species',
        'health_display',
        'cause_of_death',
        'cause_of_death_confidence',
        'maturity_display',
        'sex_display',
        'behaviour',
        'habitat_display',
        'nesting_event',
        'checked_for_injuries',
        'scanned_for_pit_tags',
        'checked_for_flipper_tags',
    ) + EncounterAdmin.LAST_COLS
    list_select_related = (
        'area',
        'site',
        'survey',
    )
    list_filter = EncounterAdmin.list_filter + (
        'taxon',
        'species',
        'health',
        'cause_of_death',
        'cause_of_death_confidence',
        'maturity',
        'sex',
        'habitat',
        'nesting_event',
        'checked_for_injuries',
        'scanned_for_pit_tags',
        'checked_for_flipper_tags',
    )
    fieldsets = EncounterAdmin.fieldsets + (('Animal', {
        'classes': ('grp-collapse', 'grp-open', 'wide', 'extrapretty'),
        'fields': (
            'taxon',
            'species',
            'maturity',
            'sex',
            'activity',
            'behaviour',
            'habitat',
            'health',
            'cause_of_death',
            'cause_of_death_confidence',
            'nesting_event',
            'checked_for_injuries',
            'scanned_for_pit_tags',
            'checked_for_flipper_tags',
        )
    }), )
    inlines = [
        MediaAttachmentInline, TagObservationInline,
        TurtleDamageObservationInline, TurtleMorphometricObservationInline,
        DugongMorphometricObservationInline, TurtleNestObservationInline,
        ManagementActionInline, NestTagObservationInline, CustomStateLogInline
    ]

    def health_display(self, obj):
        """Make health status human readable."""
        return obj.get_health_display()

    health_display.short_description = 'Health'

    def maturity_display(self, obj):
        """Make maturity human readable."""
        return obj.get_maturity_display()

    maturity_display.short_description = 'Maturity'

    def sex_display(self, obj):
        """Make sex human readable."""
        return obj.get_sex_display()

    sex_display.short_description = 'Sex'

    def status_display(self, obj):
        """Make QA status human readable."""
        return obj.get_status_display()

    status_display.short_description = 'QA Status'

    def habitat_display(self, obj):
        """Make habitat human readable."""
        return obj.get_habitat_display()

    habitat_display.short_description = 'Habitat'
Example #15
0
class EncounterAdmin(FSMTransitionMixin, VersionAdmin):
    """Admin for Encounter with inlines for all Observations.

    This admin can be extended by other Encounter Admin classes.
    """

    # -------------------------------------------------------------------------
    # Change list
    change_list_filter_template = "admin/filter_listing.html"

    date_hierarchy = 'when'
    # Filters for change_list
    list_filter = (
        'area',
        'site',
        'status',
        # 'observer', 'reporter',
        'location_accuracy',
        'encounter_type',
        'source')  # 'survey',

    # Columns for change_list, allow re-use and inserting fields
    FIRST_COLS = ('when', 'area', 'site', 'latitude', 'longitude',
                  'location_accuracy', 'name')
    LAST_COLS = ('observer', 'reporter', 'source_display', 'source_id',
                 'status', 'encounter_type')  # 'survey',
    list_display = FIRST_COLS + LAST_COLS
    # Layout: save buttons also on top - overridden by Grapelli admin skin
    # save_on_top = True

    # Change_list fulltext search fields
    search_fields = (
        'observer__name',
        'observer__username',
        'name',
        'reporter__name',
        'reporter__username',
        'source_id',
    )

    # Performance
    # https://docs.djangoproject.com/en/1.11/ref/contrib/admin/
    # #django.contrib.admin.ModelAdmin.list_select_related
    list_select_related = (
        'area',
        'site',
        'survey',
        'observer',
        'reporter',
    )

    # -------------------------------------------------------------------------
    # Change form
    # select2 widgets for searchable dropdowns
    form = s2form(Encounter, attrs=S2ATTRS)
    formfield_overrides = FORMFIELD_OVERRIDES
    autocomplete_fields = [
        'area',
        'site',
        'survey',
        'observer',
        'reporter',
    ]
    # observer = forms.ChoiceField(
    #     widget=ModelSelect2Widget(
    #         model=get_user_model(),
    #         search_fields=[
    #             "username__icontains",
    #             "name__icontains",
    #             "role__icontains",
    #             "email__icontains"]
    #     )
    # )
    # reporter = forms.ChoiceField(
    #     widget=ModelSelect2Widget(
    #         model=get_user_model(),
    #         search_fields=[
    #             "username__icontains",
    #             "name__icontains",
    #             "role__icontains",
    #             "email__icontains"]
    #     )
    # )
    # area = forms.ChoiceField(
    #     widget=ModelSelect2Widget(
    #         model=Area,
    #         search_fields=["name__icontains", ]
    #     )
    # )
    # site = forms.ChoiceField(
    #     widget=ModelSelect2Widget(
    #         model=Area,
    #         search_fields=["name__icontains", ]
    #     )
    # )
    # survey = forms.ChoiceField(
    #     widget=ModelSelect2Widget(
    #         model=Survey,
    #         search_fields=["site_name__icontains", "reporter__name__icontains", ]
    #     )
    # )

    # Django-fsm transitions config
    fsm_field = [
        'status',
    ]

    # Change_view form layout
    fieldsets = (('Encounter', {
        'classes': ('grp-collapse', 'grp-open', 'wide', 'extrapretty'),
        'fields': (
            'area',
            'site',
            'survey',
            'where',
            'location_accuracy',
            'when',
            'observer',
            'reporter',
            'source',
            'source_id',
        )
    }), )

    # Change_view inlines
    inlines = [
        MediaAttachmentInline, TagObservationInline,
        TurtleDamageObservationInline, TurtleMorphometricObservationInline,
        TrackTallyObservationInline,
        TurtleNestDisturbanceTallyObservationInline, ManagementActionInline,
        NestTagObservationInline, TurtleNestObservationInline,
        TurtleNestDisturbanceObservationInline,
        HatchlingMorphometricObservationInline,
        TurtleHatchlingEmergenceObservationInline,
        TurtleHatchlingEmergenceOutlierObservationInline,
        LightSourceObservationObservationInline, CustomStateLogInline
    ]

    def source_display(self, obj):
        """Make data source readable."""
        return obj.get_source_display()

    source_display.short_description = 'Data Source'

    def latitude(self, obj):
        """Make data source readable."""
        return obj.latitude

    latitude.short_description = 'Latitude'

    def longitude(self, obj):
        """Make data source readable."""
        return obj.longitude

    longitude.short_description = 'Longitude'

    def encounter_type_display(self, obj):
        """Make encounter type readable."""
        return obj.get_encounter_type_display()

    encounter_type_display.short_description = 'Encounter Type'
Example #16
0
class ConservationActionAdmin(ImportExportModelAdmin, VersionAdmin):
    """Admin for Conservation Management Actions."""

    model = cons_models.ConservationAction
    form = s2form(cons_models.ConservationAction, attrs=S2ATTRS)
    resource_class = cons_resources.ConservationActionResource
    autocomplete_fields = ["taxa", "communities", "category", ]

    list_display = (
        "pk",
        "taxon_list",
        "com_list",
        "document",
        "occurrence_area_code",
        "category",
        "instructions",
        "implementation_notes",
        "completion_date",
        "expenditure",
        "status")
    list_filter = (
        "status",
        "category",
        "document",
        ("completion_date", admin.DateFieldListFilter),
    )
    search_fields = (
        "occurrence_area_code",
        "instructions",
        "implementation_notes",
    )

    save_on_top = True
    # filter_horizontal = ("communities", )
    formfield_overrides = FORMFIELD_OVERRIDES
    readonly_fields = ["expenditure", ]

    fieldsets = (
        ("Affiliation", {
            "classes": ("grp-collapse", "grp-open", "wide", "extrapretty"),
            "fields": ("taxa", "communities", "document",
                       "target_area", "occurrence_area_code")
        }),
        ("Intent", {
            "classes": ("grp-collapse", "grp-open", "wide", "extrapretty"),
            "fields": ("category", "instructions",)
        }),
        ("Implementation", {
            "classes": ("grp-collapse", "grp-open", "wide", "extrapretty"),
            "fields": ("implementation_notes", "completion_date",)
        }),

    )
    inlines = [
        FileAttachmentInline,
        ConservationActivityInline,
    ]

    def taxon_list(self, obj):
        """Make M2M taxa readable."""
        return ", ".join([taxon.__str__() for taxon in obj.taxa.all()])
    taxon_list.short_description = "Species"

    def com_list(self, obj):
        """Make M2M taxa readable."""
        return ", ".join([com.__str__() for com in obj.communities.all()])
    com_list.short_description = "Communities"

    def status(self, obj):
        """Make status readable."""
        return obj.status
    status.short_description = "Progress"
Example #17
0
class SurveyAdmin(FSMTransitionMixin, VersionAdmin, admin.ModelAdmin):
    """Survey Admin."""

    # model = Survey
    # change list
    date_hierarchy = 'start_time'
    list_select_related = (
        'site',
        'reporter',
    )
    list_display = (
        '__str__',
        'source',
        'device_id',
        'end_device_id',
        'site',
        'start_time',
        'end_time',
        'reporter',
        'start_comments',
        'end_comments',
        'status',
        'production',
    )
    list_filter = ('device_id', 'site', 'reporter', 'status', 'production')
    search_fields = ('site__name', 'start_comments', 'end_comments',
                     'reporter__name', 'reporter__username')

    # change view
    form = s2form(Survey, attrs=S2ATTRS)
    formfield_overrides = FORMFIELD_OVERRIDES
    fsm_field = [
        'status',
    ]
    fieldsets = (
        (_('Device'), {
            'classes': ('grp-collapse', 'grp-open', 'wide', 'extrapretty'),
            'fields': (
                'source',
                'source_id',
                'device_id',
                'end_source_id',
                'end_device_id',
                'production',
            )
        }),
        (_('Location'), {
            'classes': ('grp-collapse', 'grp-open', 'wide', 'extrapretty'),
            'fields': (
                'transect',
                'start_location',
                'end_location',
                'site',
            )
        }),
        (_('Time'), {
            'classes': ('grp-collapse', 'grp-open', 'wide', 'extrapretty'),
            'fields': (
                'start_time',
                'end_time',
            )
        }),
        (_('Team'), {
            'classes': ('grp-collapse', 'grp-open', 'wide', 'extrapretty'),
            'fields': (
                'start_comments',
                'end_comments',
                'reporter',
                'team',
                'start_photo',
                'end_photo',
            )
        }),
    )
    inlines = [
        CustomStateLogInline,
    ]
Example #18
0
class CommunityConservationListingAdmin(FSMTransitionMixin, VersionAdmin):
    """Admin for CommunityConservationListing."""

    save_on_top = True
    date_hierarchy = "effective_from"

    # FSM Transitions
    fsm_field = ["status", ]

    # List View
    list_display = (
        "community",
        "scope",
        "status",
        "category_cache",
        "criteria_cache",
        "proposed_on",
        "effective_from",
        "effective_to",
        "review_due",
        "comments",
    )
    list_filter = (
        "category",
        "scope",
        "status",
        ("proposed_on", admin.DateFieldListFilter),
        ("effective_from", admin.DateFieldListFilter),
        ("effective_to", admin.DateFieldListFilter),
        ("review_due", admin.DateFieldListFilter),
    )
    search_fields = ("comments", )

    # Detail View
    form = s2form(cons_models.CommunityConservationListing, attrs=S2ATTRS)
    formfield_overrides = FORMFIELD_OVERRIDES
    autocomplete_fields = ["community", "category", "criteria", ]
    inlines = [CustomStateLogInline, FileAttachmentInline]

    fieldsets = (
        ("Conservation Status", {
            "classes": ("grp-collapse", "grp-open", "wide", "extrapretty"),
            "fields": ("community", "scope", "category", "criteria",)}
         ),
        ("Data lineage", {
            "classes": ("grp-collapse", "grp-closed", "wide", "extrapretty"),
            "fields": ("source", "source_id", )}
         ),
        ("Approval milestones and log", {
            "classes": ("grp-collapse", "grp-closed", "wide", "extrapretty"),
            "fields": ("proposed_on", "effective_from", "effective_to", "last_reviewed_on", "review_due", "comments",)}
         ),
    )

    def formfield_for_manytomany(self, db_field, request, **kwargs):
        """Restrict available cat and crit to lists relevant to species."""
        if db_field.name == "category":
            kwargs["queryset"] = cons_models.ConservationCategory.objects.filter(
                conservation_list__scope_communities=True
            ).prefetch_related(
                "conservation_list"
            ).order_by(
                "conservation_list__code", "rank"
            )

        if db_field.name == "criteria":
            kwargs["queryset"] = cons_models.ConservationCriterion.objects.filter(
                conservation_list__scope_communities=True
            ).prefetch_related(
                "conservation_list"
            ).order_by(
                "conservation_list__code", "rank"
            )
        return super(CommunityConservationListingAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)
Example #19
0
class ConservationThreatAdmin(ImportExportModelAdmin, VersionAdmin):
    """Admin for Conservation Management Threats."""

    model = cons_models.ConservationThreat
    form = s2form(cons_models.ConservationThreat, attrs=S2ATTRS)
    resource_class = cons_resources.ConservationThreatResource
    autocomplete_fields = ["taxa", "communities", "category", ]

    list_display = (
        "pk",
        "taxon_list",
        "com_list",
        "document",
        "occurrence_area_code",
        "category",
        "cause",
        "encountered_on",
        "encountered_by",
        "current_impact",
        "potential_impact",
        "potential_onset",
    )
    list_filter = (
        "category",
        "document",
        ("encountered_on", admin.DateFieldListFilter),
        "current_impact",
        "potential_impact",
        "potential_onset",
    )
    search_fields = (
        "occurrence_area_code",
        "cause",
    )

    save_on_top = True
    formfield_overrides = FORMFIELD_OVERRIDES
    fieldsets = (
        ("Affiliation", {
            "classes": ("grp-collapse", "grp-open", "wide", "extrapretty"),
            "fields": ("taxa", "communities", "document",
                       "target_area", "occurrence_area_code")
        }),
        ("Threat", {
            "classes": ("grp-collapse", "grp-open", "wide", "extrapretty"),
            "fields": ("encountered_by", "encountered_on", "category", "cause",
                       "area_affected_percent", "current_impact",
                       "potential_impact", "potential_onset")
        }),
    )
    inlines = [
        FileAttachmentInline,
    ]

    def taxon_list(self, obj):
        """Make M2M taxa readable."""
        return ", ".join([taxon.__str__() for taxon in obj.taxa.all()])
    taxon_list.short_description = "Species"

    def com_list(self, obj):
        """Make M2M taxa readable."""
        return ", ".join([com.__str__() for com in obj.communities.all()])
    com_list.short_description = "Communities"
Example #20
0
# from fsm_admin.mixins import FSMTransitionMixin
from mptt.admin import MPTTModelAdmin  # TreeRelatedFieldListFilter
from occurrence.models import CommunityAreaEncounter, TaxonAreaEncounter
# from wastd.observations.filters import LocationListFilter
from rest_framework.authtoken.admin import TokenAdmin
from reversion.admin import VersionAdmin
from taxonomy import filters as tax_filters
from taxonomy.models import Taxon  # Crossreference, Vernacular,
from taxonomy.models import (Community, HbvFamily, HbvGenus, HbvGroup, HbvName,
                             HbvParent, HbvSpecies, HbvSupra, HbvVernacular,
                             HbvXref)
from shared.admin import FORMFIELD_OVERRIDES, S2ATTRS
# from leaflet.admin import LeafletGeoAdmin
# from leaflet.forms.widgets import LeafletWidget

TaxonAreaEncounterForm = s2form(TaxonAreaEncounter, attrs=S2ATTRS)
CommunityAreaEncounterForm = s2form(CommunityAreaEncounter, attrs=S2ATTRS)

TokenAdmin.raw_id_fields = ("user", )


@admin.register(HbvName)
class HbvNameAdmin(VersionAdmin, admin.ModelAdmin):
    """Admin for HbvName."""

    save_on_top = True
    # date_hierarchy = "datetime"
    list_display = (
        "name_id",
        "rank_name",
        "full_name",