Пользователь Django с кортежем в качестве имени пользователя - PullRequest
0 голосов
/ 06 июня 2018

У меня есть солидный уровень в Django, но я не могу найти, как правильно его решить:

Я создал API, который будет использоваться в нескольких мобильных проектах.Поэтому я реализовал модель приложения, которую я передаю при входе в систему.

Я также создал пользовательскую модель пользователя:

class CustomUser(AbstractUser):

created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)

username = None
email = models.EmailField('email address', unique=True)
application = models.ForeignKey(Application, null=True)

USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []

objects = UserManager()

class Meta:
    unique_together = ('email', 'application')

Я использую djangorestframework-jwt.Итак, у меня есть вызов API, для которого требуется токен. Для получения токена нужны электронная почта, пароль и приложение (apikey как строка FYI).

Все работает нормально, за исключением того, что в этой конфигурации я не могусоздать другого пользователя с тем же адресом электронной почты, но другим приложением.Потому что мой EmailField - это мой USERNAME_FIELD.

Есть ли какое-нибудь решение, которое позволит мне переписать все?

Лучшее, что я имею в виду, - это добавить поле (например, CharField), которое будет уникальным (например, сочетание user.id + apikey), которое будет заполнено автоматически при создании.Но затем, когда я использую ./manage.py createuperuser, django попросит меня заполнить поле вручную.Ничего страшного, но если у вас будет лучший / правильный путь, я буду рад!

1 Ответ

0 голосов
/ 06 июня 2018

Как насчет использования многие вместо foreignkey :

class CustomUser(AbstractUser):

    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    username = None
    email = models.EmailField('email address', unique=True)
    applications = models.ManyToManyField(Application, null=True)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = UserManager()

    class Meta:
        unique_together = (('email', 'application'),)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...