Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions geonode/assets/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class Meta:
verbose_name_plural = "Assets"

def __str__(self) -> str:
return super().__str__()
return self.title


class LocalAsset(Asset):
Expand All @@ -48,7 +48,7 @@ class Meta:
verbose_name_plural = "Local assets"

def __str__(self) -> str:
return f"{self.__class__.__name__}: {self.type}|{self.title}"
return f"{self.__class__.__name__}: {self.title}"


def cleanup_asset_data(instance, *args, **kwargs):
Expand Down
32 changes: 31 additions & 1 deletion geonode/base/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,13 @@
from django.contrib import admin
from django.conf import settings
from django.shortcuts import redirect, render
from django.urls import path
from django.urls import NoReverseMatch, path
from dal import autocomplete
from taggit.forms import TagField
from django.core.management import call_command
from django.contrib import messages
from django.urls import reverse
from django.utils.html import format_html

from treebeard.admin import TreeAdmin
from treebeard.forms import movenodeform_factory
Expand Down Expand Up @@ -155,6 +157,34 @@ class ContactRoleAdmin(admin.ModelAdmin):
form = forms.modelform_factory(ContactRole, fields="__all__")


class LinkInline(admin.TabularInline):
model = Link
extra = 0

readonly_fields = ("asset_admin_link",)
fields = ("link_type", "name", "mime", "url", "asset", "asset_admin_link")

@admin.display(description="Asset")
def asset_admin_link(self, obj):
if not obj.asset_id:
return "—"

a = obj.asset

# Upcast to the real subclass (DB hit)
a = a.get_real_instance()

# Build admin URL for the concrete model
opts = a._meta
try:
url = reverse(f"admin:{opts.app_label}_{opts.model_name}_change", args=(a.pk,))
except NoReverseMatch:
# if that concrete model isn't registered in admin
return str(a)

return format_html('<a href="{}" target="_blank" rel="noopener">{}</a>', url, a)


class LinkAdmin(admin.ModelAdmin):
model = Link
list_display_links = ("id",)
Expand Down
7 changes: 5 additions & 2 deletions geonode/documents/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
from django.contrib import admin

from geonode.documents.models import Document
from geonode.base.admin import ResourceBaseAdminForm, SparseInline
from geonode.base.admin import ResourceBaseAdminForm, SparseInline, LinkInline


class DocumentAdminForm(ResourceBaseAdminForm):
Expand All @@ -33,7 +33,10 @@ class Meta(ResourceBaseAdminForm.Meta):


class DocumentAdmin(admin.ModelAdmin):
inlines = (SparseInline,)
inlines = (
LinkInline,
SparseInline,
)
exclude = ("ll_bbox_polygon", "bbox_polygon", "srid", "tkeywords")
list_display = (
"id",
Expand Down
3 changes: 2 additions & 1 deletion geonode/layers/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

from django.contrib import admin

from geonode.base.admin import ResourceBaseAdminForm, SparseInline
from geonode.base.admin import ResourceBaseAdminForm, SparseInline, LinkInline
from geonode.layers.models import Dataset, Attribute, Style


Expand Down Expand Up @@ -69,6 +69,7 @@ class DatasetAdmin(admin.ModelAdmin):
readonly_fields = ("uuid", "alternate", "workspace", "geographic_bounding_box")
inlines = (
AttributeInline,
LinkInline,
SparseInline,
)
form = DatasetAdminForm
Expand Down
Loading