user list csv export
This commit is contained in:
parent
13968b3ed7
commit
57dd5cb521
|
|
@ -17,7 +17,6 @@ class _SiteSettingsSerializer(serializers.ModelSerializer):
|
|||
|
||||
|
||||
class BackUserSerializer(UserSerializer):
|
||||
|
||||
last_country = _SiteSettingsSerializer(read_only=True)
|
||||
roles = RoleBaseSerializer(many=True)
|
||||
|
||||
|
|
@ -150,3 +149,21 @@ class UserRoleSerializer(serializers.ModelSerializer):
|
|||
'user',
|
||||
'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/<int:id>/', views.UserRUDView.as_view(), name='user-rud'),
|
||||
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 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.filters import OrderingFilter
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.viewsets import ModelViewSet
|
||||
|
||||
from account import models, filters
|
||||
from account.models import User
|
||||
|
|
@ -118,8 +121,8 @@ def get_user_csv(request, id):
|
|||
"is_admin": user.is_superuser,
|
||||
"encrypted_password": user.password,
|
||||
"reset_password_token": token.key,
|
||||
"reset_password_sent_at": token.created, # TODO: не уверен в назначении поля, лучше проверить
|
||||
"last_sign_in_at": user.last_login, # Повтор?
|
||||
"reset_password_sent_at": token.created, # TODO: не уверен в назначении поля, лучше проверить
|
||||
"last_sign_in_at": user.last_login, # Повтор?
|
||||
"confirmation_token": user.confirm_email_token,
|
||||
"unconfirmed_email": 1 if user.unconfirmed_email else 0
|
||||
}
|
||||
|
|
@ -132,3 +135,49 @@ def get_user_csv(request, id):
|
|||
writer.writerow(fields.values())
|
||||
|
||||
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