Я новичок в использовании Django Rest Framework. Я унаследовал проект Django с двумя пользовательскими моделями: mods.User
, привязанный к AUTH_USER_MODEL
и players.Member
.
По причинам, о которых я не могу здесь рассказать, они оба наследуются от AbstractBaseUser
, но содержат разную информацию, причем общим для них является только поле email
.
Я пытаюсь использовать токен-аутентификацию для пользователей в players.Member
. Я создал конечную точку /players_endpoint/register
, которая успешно добавляет игроков в базу данных. Однако после добавления игрока в базу данных ответ json возвращается с Cannot assign "<Member: offworld_321>": "Token.user" must be a "User" instance.
Мое представление создания выглядит следующим образом:
class MemberCreateView(generics.CreateAPIView):
queryset = Member.objects.all()
def post(self, request, format='json'):
serializer = MemberCreateSerializer(data=request.data)
if serializer.is_valid():
user = serializer.save()
if user:
token = Token.objects.create(user=user)
json = serializer.data
json['token'] = token.key
return Response(json, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Я следовал руководству здесь
Как сделать так, чтобы при регистрации игрок получал токен, который будет использоваться для аутентификации?
Token.user
на самом деле должен быть экземпляромUser
. Не экземплярMember
. Возможно, у вашегоMember
есть связанныйUser
, на который вы могли бы ссылаться, чтобы получить связанныйToken
. - person Ross Rogers   schedule 31.01.2018mods.User
никак не связан сplayers.Member
, кроме того факта, чтоmods.User
имеет права администратора. Есть ли другой вариант, кроме использованияToken.objects.create
? - person dot64dot   schedule 31.01.2018User
, и она автоматически привязывается к связке промежуточного программного обеспечения django. Стандартная http Auth, Token Auth, сеансы. Почему бы вам не использовать стандартную таблицу/модельUser
?User
s не должны иметь права администратора/суперпользователя. В любом случае, я понимаю, что вы работаете с дизайнерскими решениями других людей, но использование нестандартной таблицы для идентификации потребует изменения или настройки множества разных частей. Возможно, у каждогоMember
может быть экземплярUser
. - person Ross Rogers   schedule 31.01.2018