admin.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from django.contrib import admin
  2. import datetime
  3. from .models import AdvUser
  4. from .utilities import send_activation_notification
  5. def send_activation_notifications(modeladmin, request, queryset):
  6. for rec in queryset:
  7. if not rec.is_activated:
  8. send_activation_notification(rec)
  9. modeladmin.message_user(request, 'Письма с оповещениями отправлены')
  10. send_activation_notifications.short_description = 'Отправка писем с оповещениями об активации'
  11. class NonactivatedFilter(admin.SimpleListFilter):
  12. title = 'Прошли активацию?'
  13. parameter_name = 'actstate'
  14. def lookups(self, request, model_admin):
  15. return (
  16. ('activated', 'Прошли'),
  17. ('threedays', 'Не прошли более 3 дней'),
  18. ('week', 'Не прошли более недели'),
  19. )
  20. def queryset(self, request, queryset):
  21. val = self.value()
  22. if val == 'activated':
  23. return queryset.filter(is_active=True, is_activated=True)
  24. elif val == 'threedays':
  25. d = datetime.date.today() - datetime.timedelta(days=3)
  26. return queryset.filter(is_active=False, is_activated=False, date_joined__date__lt=d)
  27. elif val == 'week':
  28. d = datetime.date.today() - datetime.timedelta(weeks=1)
  29. return queryset.filter(is_active=False, is_activated=False, date_joined__date__lt=d)
  30. class AdvUserAdmin(admin.ModelAdmin):
  31. list_display = ('__str__', 'is_activated', 'is_active', 'date_joined')
  32. search_fields = ('username', 'email', 'first_name', 'last_name')
  33. list_filter = (NonactivatedFilter,)
  34. fields = (('username', 'email'), ('last_name', 'first_name', 'middle_name'),
  35. ('is_active', 'is_activated'), ('is_staff', 'is_superuser'),
  36. 'groups', 'user_permissions', ('last_login', 'date_joined'))
  37. readonly_fields = ('last_login', 'date_joined')
  38. actions = (send_activation_notifications,)
  39. admin.site.register(AdvUser, AdvUserAdmin)