Merge pull request #2131 from umap-project/admin-export-csv

feat: very minimal CSV export of users and maps in admin
This commit is contained in:
Yohan Boniface 2024-09-12 15:33:47 +02:00 committed by GitHub
commit c158303fbb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,8 +1,34 @@
import csv
from datetime import datetime
from django.contrib.auth.admin import UserAdmin as UserAdminBase
from django.contrib.auth.models import User
from django.contrib.gis import admin from django.contrib.gis import admin
from django.http import HttpResponse
from django.utils.translation import gettext_lazy as _
from .models import DataLayer, Licence, Map, Pictogram, Team, TileLayer from .models import DataLayer, Licence, Map, Pictogram, Team, TileLayer
class CSVExportMixin:
actions = ["as_csv"]
@admin.action(description=_("CSV Export"))
def as_csv(self, request, queryset):
modelname = queryset.model.__name__.lower()
filename = f"umap_{modelname}_{datetime.now().isoformat()}.csv"
response = HttpResponse(
content_type="text/csv",
headers={"Content-Disposition": f'attachment; filename="{filename}"'},
)
writer = csv.writer(response)
writer.writerow(self.csv_fields)
for user in queryset:
writer.writerow(getattr(user, field) for field in self.csv_fields)
return response
class TileLayerAdmin(admin.ModelAdmin): class TileLayerAdmin(admin.ModelAdmin):
list_display = ( list_display = (
"name", "name",
@ -11,10 +37,22 @@ class TileLayerAdmin(admin.ModelAdmin):
list_editable = ("rank",) list_editable = ("rank",)
class MapAdmin(admin.GISModelAdmin): class MapAdmin(CSVExportMixin, admin.GISModelAdmin):
search_fields = ("name",) search_fields = ("name",)
autocomplete_fields = ("owner", "editors") autocomplete_fields = ("owner", "editors")
list_filter = ("share_status",) list_filter = ("share_status",)
csv_fields = (
"pk",
"name",
"center",
"zoom",
"created_at",
"modified_at",
"edit_status",
"share_status",
"owner_id",
"team_id",
)
class PictogramAdmin(admin.ModelAdmin): class PictogramAdmin(admin.ModelAdmin):
@ -30,9 +68,23 @@ class TeamAdmin(admin.ModelAdmin):
filter_horizontal = ("users",) filter_horizontal = ("users",)
class UserAdmin(CSVExportMixin, UserAdminBase):
csv_fields = [
"pk",
"username",
"email",
"first_name",
"last_name",
"last_login",
"date_joined",
]
admin.site.register(Map, MapAdmin) admin.site.register(Map, MapAdmin)
admin.site.register(DataLayer) admin.site.register(DataLayer)
admin.site.register(Pictogram, PictogramAdmin) admin.site.register(Pictogram, PictogramAdmin)
admin.site.register(TileLayer, TileLayerAdmin) admin.site.register(TileLayer, TileLayerAdmin)
admin.site.register(Licence) admin.site.register(Licence)
admin.site.register(Team, TeamAdmin) admin.site.register(Team, TeamAdmin)
admin.site.unregister(User)
admin.site.register(User, UserAdmin)