user list csv export
This commit is contained in:
parent
13968b3ed7
commit
57dd5cb521
|
|
@ -17,7 +17,6 @@ class _SiteSettingsSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
|
|
||||||
class BackUserSerializer(UserSerializer):
|
class BackUserSerializer(UserSerializer):
|
||||||
|
|
||||||
last_country = _SiteSettingsSerializer(read_only=True)
|
last_country = _SiteSettingsSerializer(read_only=True)
|
||||||
roles = RoleBaseSerializer(many=True)
|
roles = RoleBaseSerializer(many=True)
|
||||||
|
|
||||||
|
|
@ -150,3 +149,21 @@ class UserRoleSerializer(serializers.ModelSerializer):
|
||||||
'user',
|
'user',
|
||||||
'establishment'
|
'establishment'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class UserCSVSerializer(serializers.ModelSerializer):
|
||||||
|
created_at = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", read_only=True, source='date_joined')
|
||||||
|
last_seen_at = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", read_only=True, source='last_login')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = models.User
|
||||||
|
fields = [
|
||||||
|
'id',
|
||||||
|
'username',
|
||||||
|
'email',
|
||||||
|
'locale',
|
||||||
|
'last_country',
|
||||||
|
'created_at',
|
||||||
|
'last_seen_at',
|
||||||
|
'last_ip',
|
||||||
|
]
|
||||||
|
|
|
||||||
|
|
@ -12,4 +12,5 @@ urlpatterns = [
|
||||||
path('user/', views.UserListView.as_view(), name='user-create-list'),
|
path('user/', views.UserListView.as_view(), name='user-create-list'),
|
||||||
path('user/<int:id>/', views.UserRUDView.as_view(), name='user-rud'),
|
path('user/<int:id>/', views.UserRUDView.as_view(), name='user-rud'),
|
||||||
path('user/<int:id>/csv/', views.get_user_csv, name='user-csv'),
|
path('user/<int:id>/csv/', views.get_user_csv, name='user-csv'),
|
||||||
|
path('user/csv/', views.UserCSVViewSet.as_view({'get': 'to_csv'}), name='user-csv-list'),
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,13 @@
|
||||||
|
import csv
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from django.http import HttpResponse, HttpResponseNotFound
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
from django_filters.rest_framework import DjangoFilterBackend
|
||||||
from rest_framework import generics, permissions, status
|
from rest_framework import generics, permissions, status
|
||||||
from rest_framework.response import Response
|
|
||||||
from rest_framework.filters import OrderingFilter
|
|
||||||
import csv
|
|
||||||
from django.http import HttpResponse, HttpResponseNotFound
|
|
||||||
from rest_framework.authtoken.models import Token
|
from rest_framework.authtoken.models import Token
|
||||||
|
from rest_framework.filters import OrderingFilter
|
||||||
|
from rest_framework.response import Response
|
||||||
|
from rest_framework.viewsets import ModelViewSet
|
||||||
|
|
||||||
from account import models, filters
|
from account import models, filters
|
||||||
from account.models import User
|
from account.models import User
|
||||||
|
|
@ -118,8 +121,8 @@ def get_user_csv(request, id):
|
||||||
"is_admin": user.is_superuser,
|
"is_admin": user.is_superuser,
|
||||||
"encrypted_password": user.password,
|
"encrypted_password": user.password,
|
||||||
"reset_password_token": token.key,
|
"reset_password_token": token.key,
|
||||||
"reset_password_sent_at": token.created, # TODO: не уверен в назначении поля, лучше проверить
|
"reset_password_sent_at": token.created, # TODO: не уверен в назначении поля, лучше проверить
|
||||||
"last_sign_in_at": user.last_login, # Повтор?
|
"last_sign_in_at": user.last_login, # Повтор?
|
||||||
"confirmation_token": user.confirm_email_token,
|
"confirmation_token": user.confirm_email_token,
|
||||||
"unconfirmed_email": 1 if user.unconfirmed_email else 0
|
"unconfirmed_email": 1 if user.unconfirmed_email else 0
|
||||||
}
|
}
|
||||||
|
|
@ -132,3 +135,49 @@ def get_user_csv(request, id):
|
||||||
writer.writerow(fields.values())
|
writer.writerow(fields.values())
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
class UserCSVViewSet(ModelViewSet):
|
||||||
|
queryset = User.objects.all()
|
||||||
|
http_method_names = ['get', ]
|
||||||
|
serializer_class = serializers.UserCSVSerializer
|
||||||
|
permission_classes = (permissions.IsAdminUser,)
|
||||||
|
filter_class = filters.AccountBackOfficeFilter
|
||||||
|
filter_backends = (OrderingFilter, DjangoFilterBackend)
|
||||||
|
|
||||||
|
ordering_fields = (
|
||||||
|
'email_confirmed',
|
||||||
|
'is_staff',
|
||||||
|
'is_active',
|
||||||
|
'is_superuser',
|
||||||
|
'last_login',
|
||||||
|
'date_joined',
|
||||||
|
)
|
||||||
|
|
||||||
|
def to_csv(self, request):
|
||||||
|
queryset = self.filter_queryset(self.get_queryset())
|
||||||
|
serializer = serializers.UserCSVSerializer(queryset, many=True)
|
||||||
|
|
||||||
|
response = HttpResponse(content_type='text/csv')
|
||||||
|
response['Content-Disposition'] = f'attachment; filename="users_{datetime.now().date()}.csv"'
|
||||||
|
|
||||||
|
writer = csv.writer(response)
|
||||||
|
writer.writerow((
|
||||||
|
'id',
|
||||||
|
'nickname',
|
||||||
|
'email',
|
||||||
|
'locale',
|
||||||
|
'last_country',
|
||||||
|
'created_at',
|
||||||
|
# 'confirmed_at',
|
||||||
|
'last_seen_at',
|
||||||
|
'last_ip',
|
||||||
|
# 'role',
|
||||||
|
))
|
||||||
|
|
||||||
|
for item in serializer.data:
|
||||||
|
print(item)
|
||||||
|
writer.writerow(item.values())
|
||||||
|
|
||||||
|
return response
|
||||||
|
# return Response(serializer.data)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user