Как указал Мадхан в своем ответе, вы пытаетесь использовать список в качестве первого индекса, а не строку.
Взято из pydocs:
str.join (итерируемый) Возвращает строку, которая является конкатенацией строк в итерируемой. Ошибка TypeError будет возникать, если в итерируемых есть какие-либо нестроковые значения, включая байтовые объекты. Разделителем между элементами является строка, обеспечивающая этот метод.
blockquote>Таким образом, вам нужно предоставить только строки в вашей итерации. Но если вы видите свой код, вы используете список объектов нескольких типов.
Первый индекс представляет собой список, а другие индексы являются строками.
Вот что происходит:
your_param = [plist[1:3], plist[5], plist[4], plist[7], plist[6]] type(your_param) <class 'list'> for param in your_param: type(param) <class 'list'> # <--- HERE <class 'str'> <class 'str'> <class 'str'> <class 'str'>
Если вы хотите, чтобы все в одной строке, вы можете сделать что-то вроде:
your_param = [''.join(plist[1:3]), plist[5], plist[4], plist[7], plist[6]] for param in your_param: type(param) <class 'str'> <class 'str'> <class 'str'> <class 'str'> <class 'str'>
Менеджеры не могут быть добавлены к классам с простым присвоением атрибута (User.objects = MyManager()
). Посмотрите на метакласс ModelBase (db/models/base.py) для наблюдения то, что все сделано для Вас негласно, когда Вы разделяете Модель на подклассы.
Необходимо смочь заставить его работать с User.add_to_class('objects', MyManager())
. С другой стороны, Вы могли сделать подкласс прокси Пользователя и добавить менеджера там.
Вы не хотите смешивать с внутренними функциями классов Django. Тот путь находится проблема с каждым обновлением в будущем.
Если Вы хотите изменить путь, люди аутентифицируют, пишут пользовательский бэкенд аутентификации.
Вот два рецепта.
http://www.davidcramer.net/code/224/logging-in-with-email-addresses-in-django.html
http://www.djangosnippets.org/snippets/577/
Оба из них нас электронная почта вместо имени пользователя. Не трудно использовать нечувствительный к регистру запрос вместо почтового запроса.