Я работаю над проектом в django, который призывает к наличию отдельных групп пользователей в их собственном username
пространство имен.
Так, например, у меня могло бы быть несколько "организаций", и username
придется только быть уникальным в той организации.
Я знаю, что могу сделать это при помощи другой модели, которая содержит идентификатор имени пользователя/организации, но это все еще оставляет это бесполезным (и требуемый) поле на defualt django автор User
то, что я должен был бы заполнить с чем-то.
Я уже записал собственным подлинным бэкендом, который аутентифицирует пользователя против LDAP. Однако как я упомянул прежде, я все еще застреваю с проблемой того, как заполнить / игнорируют username
поле на значении по умолчанию django пользователь.
Есть ли способ отбросить ограничение уникальности для username
для пользователей автора Django?
Я не уверен, что это именно то, что вы ищете, но я думаю, вы могли бы использовать хитрость, подобную тому, что содержится в в этом ответе .
Следующий код работает, пока он находится в месте, которое запускается, когда Django загружает ваши модели.
from django.contrib.auth.models import User
User._meta.get_field('username')._unique = False
Обратите внимание, что это не изменит уникальное ограничение базы данных для таблицы auth_user
, если она уже была создана. Поэтому вам необходимо внести это изменение до запуска syncdb. В качестве альтернативы, если вы не хотите воссоздавать таблицу auth_user
, вы можете внести это изменение, а затем вручную изменить таблицу базы данных, чтобы снять ограничение.
Лично от меня не требовалось искать решение, но одним из способов решения этой проблемы (с точки зрения SAAS) было бы прикрепить имя пользователя к идентификатору организации (предполагая уникальные организации). Например: subdomain.yoursite.com будет приравниваться к пользователю с именем пользователя: subdomain_username. Вам просто нужно будет закодировать некоторую бизнес-логику при входе в субдомен, чтобы прикрепить ее к имени пользователя.
Что вы можете сделать, это расширить Пользовательская модель. Для таблицы пользователя генерируйте имя пользователя (E.g. a_123, a_345), которые не будут отображаться вообще на сайте.
Затем создайте новую модель, которая расширяет пользователя.
class AppUser(User):
username = models.CharField...
organization = models.CharField...
Затем вы создаете пользовательскую бэкэнд аутентификации, которые используют appuser вместо объекта пользователя.