admin.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. """Admin settings"""
  2. from itertools import chain
  3. from django.conf import settings
  4. from django.contrib import admin
  5. from social_core.utils import setting_name
  6. from .models import UserSocialAuth, Nonce, Association
  7. class UserSocialAuthOption(admin.ModelAdmin):
  8. """Social Auth user options"""
  9. list_display = ('user', 'id', 'provider', 'uid')
  10. list_filter = ('provider',)
  11. raw_id_fields = ('user',)
  12. list_select_related = True
  13. def get_search_fields(self, request=None):
  14. search_fields = getattr(
  15. settings, setting_name('ADMIN_USER_SEARCH_FIELDS'), None
  16. )
  17. if search_fields is None:
  18. _User = UserSocialAuth.user_model()
  19. username = getattr(_User, 'USERNAME_FIELD', None) or \
  20. hasattr(_User, 'username') and 'username' or \
  21. None
  22. fieldnames = ('first_name', 'last_name', 'email', username)
  23. all_names = self._get_all_field_names(_User._meta)
  24. search_fields = [name for name in fieldnames
  25. if name and name in all_names]
  26. return ['user__' + name for name in search_fields] + \
  27. getattr(settings, setting_name('ADMIN_SEARCH_FIELDS'), [])
  28. @staticmethod
  29. def _get_all_field_names(model):
  30. names = chain.from_iterable(
  31. (field.name, field.attname)
  32. if hasattr(field, 'attname') else (field.name,)
  33. for field in model.get_fields()
  34. # For complete backwards compatibility, you may want to exclude
  35. # GenericForeignKey from the results.
  36. if not (field.many_to_one and field.related_model is None)
  37. )
  38. return list(set(names))
  39. class NonceOption(admin.ModelAdmin):
  40. """Nonce options"""
  41. list_display = ('id', 'server_url', 'timestamp', 'salt')
  42. search_fields = ('server_url',)
  43. class AssociationOption(admin.ModelAdmin):
  44. """Association options"""
  45. list_display = ('id', 'server_url', 'assoc_type')
  46. list_filter = ('assoc_type',)
  47. search_fields = ('server_url',)
  48. admin.site.register(UserSocialAuth, UserSocialAuthOption)
  49. admin.site.register(Nonce, NonceOption)
  50. admin.site.register(Association, AssociationOption)