Для чего" swappable " в модели meta?

глядя на жесткий код моделей Django auth, я наткнулся на этот бит кода:

class User(AbstractUser):
    class Meta(AbstractUser.Meta):
        swappable = 'AUTH_USER_MODEL'

очевидно, что это имеет какое-то отношение к новому AUTH_USER_MODEL настройка в settings.py, но как это на самом деле работает, каким "трюком"python?

и в каких других ситуациях его можно использовать?

2 ответов


swappable является "намеренно недокументированной" функцией, которая в настоящее время разрабатывается / тестируется. Он используется для обработки " у меня есть базовая абстрактная модель, которая имеет некоторые отношения внешнего ключа."Немного больше деталей доступно из билетная система Django и github. Поскольку это функция "stealth alpha", она не гарантирует работу (для чего-либо, кроме пользователя), и понимание подробной операции, вероятно, потребует дайвинга в исходный код. Он работает с AUTH_USER_MODEL потому что модель пользователя и swappable флаг были разработаны вместе, специально друг для друга.


Django 1.5 добавил сменные пользовательские модели, поэтому вы можете заменить пользовательскую модель Django одной из своих (ограничить количество символов, использовать электронную почту в качестве идентификатора...)

больше: https://docs.djangoproject.com/en/dev/releases/1.5/#configurable-user-model https://docs.djangoproject.com/en/dev/topics/auth/customizing/#auth-custom-user