Django - Позвольте дублирующиеся имена пользователей

Я работаю над проектом в django, который призывает к наличию отдельных групп пользователей в их собственном username пространство имен.

Так, например, у меня могло бы быть несколько "организаций", и username придется только быть уникальным в той организации.

Я знаю, что могу сделать это при помощи другой модели, которая содержит идентификатор имени пользователя/организации, но это все еще оставляет это бесполезным (и требуемый) поле на defualt django автор User то, что я должен был бы заполнить с чем-то.

Я уже записал собственным подлинным бэкендом, который аутентифицирует пользователя против LDAP. Однако как я упомянул прежде, я все еще застреваю с проблемой того, как заполнить / игнорируют username поле на значении по умолчанию django пользователь.

Есть ли способ отбросить ограничение уникальности для username для пользователей автора Django?

11
задан TM. 8 January 2010 в 15:22
поделиться

3 ответа

Я не уверен, что это именно то, что вы ищете, но я думаю, вы могли бы использовать хитрость, подобную тому, что содержится в в этом ответе .

Следующий код работает, пока он находится в месте, которое запускается, когда Django загружает ваши модели.

from django.contrib.auth.models import User

User._meta.get_field('username')._unique = False

Обратите внимание, что это не изменит уникальное ограничение базы данных для таблицы auth_user , если она уже была создана. Поэтому вам необходимо внести это изменение до запуска syncdb. В качестве альтернативы, если вы не хотите воссоздавать таблицу auth_user , вы можете внести это изменение, а затем вручную изменить таблицу базы данных, чтобы снять ограничение.

8
ответ дан 3 December 2019 в 08:04
поделиться

Лично от меня не требовалось искать решение, но одним из способов решения этой проблемы (с точки зрения SAAS) было бы прикрепить имя пользователя к идентификатору организации (предполагая уникальные организации). Например: subdomain.yoursite.com будет приравниваться к пользователю с именем пользователя: subdomain_username. Вам просто нужно будет закодировать некоторую бизнес-логику при входе в субдомен, чтобы прикрепить ее к имени пользователя.

1
ответ дан 3 December 2019 в 08:04
поделиться

Что вы можете сделать, это расширить Пользовательская модель. Для таблицы пользователя генерируйте имя пользователя (E.g. a_123, a_345), которые не будут отображаться вообще на сайте.

Затем создайте новую модель, которая расширяет пользователя.

class AppUser(User):
    username = models.CharField...
    organization = models.CharField...

Затем вы создаете пользовательскую бэкэнд аутентификации, которые используют appuser вместо объекта пользователя.

6
ответ дан 3 December 2019 в 08:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: