import email from django.contrib import admin from django.shortcuts import render from leaflet.admin import LeafletGeoAdmin from leaflet.admin import LeafletGeoAdminMixin from leaflet_admin_list.admin import LeafletAdminListMixin from .models import RogUser, Location, SystemSettings, JoinedEvent, Favorite, TravelList, TravelPoint, ShapeLayers, Event, Location_line, Location_polygon, JpnAdminMainPerf, Useractions, CustomUser, GifuAreas, UserTracks, templocation, UserUpload, EventUser, GoalImages, CheckinImages, NewEvent, NewEvent2, Team, NewCategory, Category, Entry, Member, TempUser from django.contrib.auth.admin import UserAdmin from django.urls import path,reverse from django.shortcuts import render from django import forms; import requests from django.http import HttpResponseRedirect from django.utils.html import format_html from .forms import CSVUploadForm from .views import process_csv_upload class RogAdmin(LeafletAdminListMixin, LeafletGeoAdminMixin, admin.ModelAdmin): list_display=['title', 'venue', 'at_date',] class ShopAdmin(LeafletAdminListMixin, LeafletGeoAdminMixin, admin.ModelAdmin): list_display=['name',] class EventRouteAdmin(LeafletAdminListMixin, LeafletGeoAdminMixin, admin.ModelAdmin): list_display=['name',] class ShopRouteAdmin(LeafletAdminListMixin, LeafletGeoAdminMixin, admin.ModelAdmin): list_display=['name',] class loadUserForm(forms.Form): server_url = forms.CharField(label="Load Data from *" ,initial='https://natnats.mobilous.com/get_team_list', widget=forms.Textarea(attrs={"rows":2, "cols":95})) class UserAdminConfig(UserAdmin): search_fields = ('email', 'group', 'zekken_number', 'event_code', 'team_name', 'is_rogaining') list_filter = ('email', 'group', 'is_rogaining') ordering = ('email',) list_display = ('email', 'group','zekken_number', 'event_code', 'team_name', 'is_active', 'is_staff', 'is_rogaining') def get_urls(self): urls = super().get_urls() new_url = [path('load-users/', self.loadUsers),] return new_url + urls def loadUsers(self, request): if request.method == "POST": frm = loadUserForm(request.POST) if frm.is_valid(): print(frm.cleaned_data['server_url']) #load json from server url = frm.cleaned_data['server_url'] response = requests.get(url) data = response.json() print("-------Event code--------") print(data) print("-------Event code--------") for i in data: _exist = CustomUser.objects.filter(email=i["zekken_number"]).delete() other_fields.setDefaut('zekken_number',i['zekken_number']) other_fields.setdefault('is_staff', True) other_fields.setdefault('is_superuser', False) other_fields.setdefault('is_active', True) other_fields.setdefault('event_code', i['event_code']) other_fields.setdefault('team_name', i['team_name']) other_fields.setdefault('group', '大垣-初心者') usr = CustomUser.objects.create_user( email=i["zekken_number"], password=i['password'], **other_fields ) form = loadUserForm() data = {'form': form} return render(request, 'admin/load_users.html', data) fieldsets = ( (None, {'fields':('email', 'group', 'zekken_number', 'event_code', 'team_name',)}), ('Permissions', {'fields':('is_staff', 'is_active', 'is_rogaining')}), ) add_fieldsets = ( (None, {'classes':('wide',), 'fields':('email', 'group','zekken_number', 'event_code', 'team_name', 'password1', 'password2')}), ) class JpnSubPerfAdmin(LeafletGeoAdmin): search_fields = ('adm0_ja', 'adm1_ja', 'adm2_ja', 'name_modified', 'area_name',) list_filter = ('adm0_ja', 'adm0_ja', 'name_modified',) ordering = ('adm0_ja',) list_display = ('adm0_ja','adm1_ja','adm2_ja' ,'name_modified', 'area_name',) class LocationAdmin(LeafletGeoAdmin): search_fields = ('location_id', 'cp', 'location_name', 'category', 'event_name','group',) list_filter = ('event_name', 'group',) ordering = ('location_id', 'cp',) list_display = ('location_id','sub_loc_id', 'cp', 'location_name', 'photos', 'category', 'group', 'event_name', 'event_active', 'auto_checkin', 'checkin_radius', 'checkin_point', 'buy_point',) def tranfer_to_location(modeladmin, request, queryset): tmp_locs = templocation.objects.all(); for l in tmp_locs : found = Location.objects.filter(location_id = l.location_id).exists() if found: Location.objects.filter(location_id = l.location_id).update( sub_loc_id = l.sub_loc_id, cp = l.cp, location_name = l.location_name, category = l.category, subcategory = l.subcategory, zip = l.zip, address = l.address, prefecture = l.prefecture, area = l.area, city = l.city, latitude = l.latitude, longitude = l.longitude, photos = l.photos, videos = l.videos, webcontents = l.webcontents, status = l.status, portal = l.portal, group = l.group, phone = l.phone, fax = l.fax, email = l.email, facility = l.facility, remark = l.remark, tags = l.tags, hidden_location = l.hidden_location, auto_checkin = l.auto_checkin, checkin_radius = l.checkin_radius, checkin_point = l.checkin_point, buy_point = l.buy_point, evaluation_value = l.evaluation_value, shop_closed = l.shop_closed, shop_shutdown = l.shop_shutdown, opening_hours_mon = l.opening_hours_mon, opening_hours_tue = l.opening_hours_tue, opening_hours_wed = l.opening_hours_wed, opening_hours_thu = l.opening_hours_thu, opening_hours_fri = l.opening_hours_fri, opening_hours_sat = l.opening_hours_sat, opening_hours_sun = l.opening_hours_sun, geom=l.geom ) else: loc = Location( location_id=l.location_id, sub_loc_id = l.sub_loc_id, cp = l.cp, location_name = l.location_name, category = l.category, subcategory = l.subcategory, zip = l.zip, address = l.address, prefecture = l.prefecture, area = l.area, city = l.city, latitude = l.latitude, longitude = l.longitude, photos = l.photos, videos = l.videos, webcontents = l.webcontents, status = l.status, portal = l.portal, group = l.group, phone = l.phone, fax = l.fax, email = l.email, facility = l.facility, remark = l.remark, tags = l.tags, hidden_location = l.hidden_location, auto_checkin = l.auto_checkin, checkin_radius = l.checkin_radius, checkin_point = l.checkin_point, buy_point = l.buy_point, evaluation_value = l.evaluation_value, shop_closed = l.shop_closed, shop_shutdown = l.shop_shutdown, opening_hours_mon = l.opening_hours_mon, opening_hours_tue = l.opening_hours_tue, opening_hours_wed = l.opening_hours_wed, opening_hours_thu = l.opening_hours_thu, opening_hours_fri = l.opening_hours_fri, opening_hours_sat = l.opening_hours_sat, opening_hours_sun = l.opening_hours_sun, geom=l.geom ) loc.save() l.delete() tranfer_to_location.short_description = "Transfer all locations in temp table to location table" class TempLocationAdmin(LeafletGeoAdmin): search_fields = ('location_id', 'cp', 'location_name', 'category', 'event_name',) list_filter = ('category', 'event_name',) ordering = ('location_id', 'cp',) list_display = ('location_id','cp', 'location_name', 'category', 'event_name', 'event_active', 'auto_checkin', 'checkin_radius', 'checkin_point', 'buy_point',) actions = [tranfer_to_location,] @admin.register(NewEvent2) class NewEvent2Admin(admin.ModelAdmin): list_display = ['event_name', 'start_datetime', 'end_datetime', 'csv_upload_button'] def get_urls(self): urls = super().get_urls() my_urls = [ path('csv-upload/', self.admin_site.admin_view(self.csv_upload_view), name='newevent2_csv_upload'), ] return my_urls + urls def csv_upload_view(self, request): if request.method == 'POST': form = CSVUploadForm(request.POST, request.FILES) if form.is_valid(): csv_file = request.FILES['csv_file'] event = form.cleaned_data['event'] process_csv_upload(csv_file, event) self.message_user(request, "CSV file has been processed successfully.") return HttpResponseRedirect("../") else: form = CSVUploadForm() return render(request, 'admin/csv_upload.html', {'form': form}) def csv_upload_button(self, obj): url = reverse('admin:newevent2_csv_upload') return format_html('CSVアップロード', url) csv_upload_button.short_description = 'CSV Upload' def changelist_view(self, request, extra_context=None): extra_context = extra_context or {} extra_context['csv_upload_url'] = reverse('admin:newevent2_csv_upload') return super().changelist_view(request, extra_context=extra_context) @admin.register(Team) class TeamAdmin(admin.ModelAdmin): list_display = ['team_name', 'owner'] search_fields = ['team_name', 'owner__email'] @admin.register(NewCategory) class NewCategoryAdmin(admin.ModelAdmin): list_display = ['category_name', 'category_number', 'duration', 'num_of_member', 'family', 'female'] list_filter = ['family', 'female'] search_fields = ['category_name'] @admin.register(Entry) class EntryAdmin(admin.ModelAdmin): list_display = ['team', 'event', 'category', 'date'] list_filter = ['event', 'category'] search_fields = ['team__team_name', 'event__event_name'] @admin.register(Member) class MemberAdmin(admin.ModelAdmin): list_display = ['team', 'user'] search_fields = ['team__team_name', 'user__email'] @admin.register(TempUser) class TempUserAdmin(admin.ModelAdmin): list_display = ['email', 'is_rogaining', 'zekken_number', 'event_code', 'team_name', 'group', 'created_at', 'expires_at'] list_filter = ['is_rogaining', 'group'] search_fields = ['email', 'zekken_number', 'team_name'] # CustomUserAdmin の修正(既存のものを更新) class CustomUserAdmin(UserAdmin): list_display = ('email', 'is_staff', 'is_active', 'is_rogaining', 'zekken_number', 'event_code', 'team_name', 'group', 'firstname', 'lastname') list_filter = ('is_staff', 'is_active', 'is_rogaining', 'group') fieldsets = ( (None, {'fields': ('email', 'password')}), ('Personal info', {'fields': ('firstname', 'lastname', 'date_of_birth', 'female')}), ('Permissions', {'fields': ('is_staff', 'is_active', 'is_rogaining','user_permissions')}), ('Rogaining info', {'fields': ('zekken_number', 'event_code', 'team_name', 'group')}), ) add_fieldsets = ( (None, { 'classes': ('wide',), #'fields': ('email', 'password1', 'password2', 'is_staff', 'is_active', 'is_rogaining')} 'fields': ('email', 'password1', 'password2', 'lastname','firstname', 'date_of_birth', 'female','is_staff', 'is_active', 'is_rogaining')} ), ) search_fields = ('email', 'firstname', 'lastname', 'zekken_number', 'team_name') ordering = ('email',) admin.site.register(Useractions) admin.site.register(RogUser, admin.ModelAdmin) admin.site.register(Location, LocationAdmin) admin.site.register(SystemSettings, admin.ModelAdmin) admin.site.register(JoinedEvent, admin.ModelAdmin) admin.site.register(Favorite, admin.ModelAdmin) admin.site.register(TravelList, admin.ModelAdmin) admin.site.register(TravelPoint, admin.ModelAdmin) admin.site.register(Event, admin.ModelAdmin) admin.site.register(Location_line, LeafletGeoAdmin) admin.site.register(Location_polygon, LeafletGeoAdmin) admin.site.register(JpnAdminMainPerf, LeafletGeoAdmin) admin.site.register(UserTracks, LeafletGeoAdmin); #admin.site.register(JpnAdminPerf, LeafletGeoAdmin) admin.site.register(GifuAreas, LeafletGeoAdmin) admin.site.register(ShapeLayers, admin.ModelAdmin) admin.site.register(UserUpload, admin.ModelAdmin) admin.site.register(EventUser, admin.ModelAdmin) #admin.site.register(UserUploadUser, admin.ModelAdmin) #admin.site.register(ShapeFileLocations, admin.ModelAdmin) admin.site.register(CustomUser, UserAdminConfig) admin.site.register(templocation, TempLocationAdmin) admin.site.register(GoalImages, admin.ModelAdmin) admin.site.register(CheckinImages, admin.ModelAdmin)