mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-12-04 16:54:02 +03:00
Updates for TokenAdmin.
- Respect USERNAME_FIELD of the user model. - Default ordering by username. - Filter by creation date.
This commit is contained in:
parent
365d409adb
commit
77be42ea6e
|
|
@ -23,10 +23,11 @@ class TokenChangeList(ChangeList):
|
||||||
|
|
||||||
class TokenAdmin(admin.ModelAdmin):
|
class TokenAdmin(admin.ModelAdmin):
|
||||||
list_display = ('key', 'user', 'created')
|
list_display = ('key', 'user', 'created')
|
||||||
|
list_filter = ('created',)
|
||||||
fields = ('user',)
|
fields = ('user',)
|
||||||
search_fields = ('user__username',)
|
search_fields = ('user__%s' % User.USERNAME_FIELD,)
|
||||||
search_help_text = _('Username')
|
search_help_text = _('Username')
|
||||||
ordering = ('-created',)
|
ordering = ('user__%s' % User.USERNAME_FIELD,)
|
||||||
actions = None # Actions not compatible with mapped IDs.
|
actions = None # Actions not compatible with mapped IDs.
|
||||||
|
|
||||||
def get_changelist(self, request, **kwargs):
|
def get_changelist(self, request, **kwargs):
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
import importlib
|
import importlib
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from django.contrib.admin import site
|
from django.contrib.admin import site
|
||||||
|
|
@ -11,7 +12,7 @@ from django.test import TestCase, modify_settings
|
||||||
from rest_framework.authtoken.admin import TokenAdmin
|
from rest_framework.authtoken.admin import TokenAdmin
|
||||||
from rest_framework.authtoken.management.commands.drf_create_token import \
|
from rest_framework.authtoken.management.commands.drf_create_token import \
|
||||||
Command as AuthTokenCommand
|
Command as AuthTokenCommand
|
||||||
from rest_framework.authtoken.models import Token
|
from rest_framework.authtoken.models import Token, TokenProxy
|
||||||
from rest_framework.authtoken.serializers import AuthTokenSerializer
|
from rest_framework.authtoken.serializers import AuthTokenSerializer
|
||||||
from rest_framework.exceptions import ValidationError
|
from rest_framework.exceptions import ValidationError
|
||||||
|
|
||||||
|
|
@ -36,6 +37,29 @@ class AuthTokenTests(TestCase):
|
||||||
token_admin = TokenAdmin(self.token, self.site)
|
token_admin = TokenAdmin(self.token, self.site)
|
||||||
assert token_admin.get_fields(mock_request) == ('user',)
|
assert token_admin.get_fields(mock_request) == ('user',)
|
||||||
|
|
||||||
|
@patch('django.contrib.admin.site.register') # avoid duplicate registrations
|
||||||
|
def test_model_admin__username_field(self, mock_register):
|
||||||
|
import rest_framework.authtoken.admin as authtoken_admin_m
|
||||||
|
|
||||||
|
class EmailUser(User):
|
||||||
|
USERNAME_FIELD = 'email'
|
||||||
|
username = None
|
||||||
|
|
||||||
|
for user_model in (User, EmailUser):
|
||||||
|
with (
|
||||||
|
self.subTest(user_model=user_model),
|
||||||
|
patch('django.contrib.auth.get_user_model', return_value=user_model) as get_user_model
|
||||||
|
):
|
||||||
|
importlib.reload(authtoken_admin_m) # reload after patching
|
||||||
|
assert get_user_model.call_count == 1
|
||||||
|
|
||||||
|
mock_request = object()
|
||||||
|
token_admin = authtoken_admin_m.TokenAdmin(TokenProxy, self.site)
|
||||||
|
assert token_admin.get_search_fields(mock_request) == (f'user__{user_model.USERNAME_FIELD}',)
|
||||||
|
assert token_admin.get_ordering(mock_request) == (f'user__{user_model.USERNAME_FIELD}',)
|
||||||
|
|
||||||
|
importlib.reload(authtoken_admin_m) # restore after testing
|
||||||
|
|
||||||
def test_token_string_representation(self):
|
def test_token_string_representation(self):
|
||||||
assert str(self.token) == 'test token'
|
assert str(self.token) == 'test token'
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user