feat: very minimal CSV export of users and maps in admin

fix #2020
This commit is contained in:
Yohan Boniface 2024-09-12 10:25:50 +02:00
parent 010329dce5
commit 17b67cc5de

View file

@ -1,8 +1,31 @@
import csv
from django.contrib.auth.admin import UserAdmin as UserAdminBase
from django.contrib.auth.models import User
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
class CSVExportMixin:
actions = ["as_csv"]
@admin.action(description=_("CSV Export"))
def as_csv(self, request, queryset):
response = HttpResponse(
content_type="text/csv",
headers={"Content-Disposition": 'attachment; filename="export.csv"'},
)
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):
list_display = (
"name",
@ -11,10 +34,22 @@ class TileLayerAdmin(admin.ModelAdmin):
list_editable = ("rank",)
class MapAdmin(admin.GISModelAdmin):
class MapAdmin(CSVExportMixin, admin.GISModelAdmin):
search_fields = ("name",)
autocomplete_fields = ("owner", "editors")
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):
@ -30,9 +65,23 @@ class TeamAdmin(admin.ModelAdmin):
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(DataLayer)
admin.site.register(Pictogram, PictogramAdmin)
admin.site.register(TileLayer, TileLayerAdmin)
admin.site.register(Licence)
admin.site.register(Team, TeamAdmin)
admin.site.unregister(User)
admin.site.register(User, UserAdmin)