Как добавить пользовательское поле на страницу входа в систему администратора Django
Для аутентификации необходимо 3 поля:
user_id
password
account_id
Каждый account_id
определяет изолированное пространство, а user_id
уникален только внутри своего соответствующего account_id
.
Я создал пользовательскую аутентификацию бэкенда и могу успешно аутентифицироваться. Проблема в том, что форма логина Django Admin по умолчанию имеет поля user_id
и password
.
Я хотел бы добавить поле account_id
в оригинальный шаблон формы Django, только подклассифицировав AuthenticationForm
, возможно ли это?
Здесь есть похожий вопрос, но он использует пользовательский шаблон входа: Добавьте пользовательское поле в форму аутентификации Django Admin
Существующий код...
Модель:
class HeliosUser(AbstractUser, DateModelBase):
username = None
user_id = models.CharField(max_length=255)
USERNAME_FIELD = "user_id"
REQUIRED_FIELDS = ["account_id", "role", "email"]
objects = HeliosUserManager()
email = models.EmailField()
account_id = models.ForeignKey(
"agent.Agent",
on_delete=models.RESTRICT,
)
...
Бэкэнд:
class SettingsBackend(BaseBackend):
def authenticate(
self, request, user_id=None, account_id=None, password=None, **kwargs
):
try:
user = HeliosUser.objects.get(
user_id=user_id, account_id=account_id
)
except HeliosUser.DoesNotExist:
return None
if user.check_password(password):
return user
return None
def get_user(self, user_id, account_id):
try:
return HeliosUser.objects.get(
user_id=user_id, account_id=account_id
)
except HeliosUser.DoesNotExist:
return None
Админ сайта:
class HeliosUserAdmin(admin.AdminSite):
site_title = "Helios Administration"
site_header = "Helios Administration"
index_title = "Helios Administration"
login_form = HeliosAuthenticationForm
admin_site = HeliosUserAdmin()
Форма аутентификации:
class HeliosAuthenticationForm(AuthenticationForm):
account_id = forms.ModelChoiceField(queryset=Agent.objects.all())
Заранее спасибо!