Фреймворк django rest не может распознать User, определенный как внешний ключ
Я пытаюсь сохранить информацию о профиле пользователя в модели django. Модель определена следующим образом
class UserProfile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
reg_date = models.DateTimeField(auto_now_add=True, blank=True)
name = models.CharField(max_length=30, blank=True)
family = models.CharField(max_length=30, blank=True)
phoneNumber = models.CharField(max_length=20, blank=True)
def __str__(self) :
return self.name + self.family
Сериализатор для модели определяется как:
class UserProfileSerializer(serializers.ModelSerializer):
class Meta:
model= UserProfile
fields = ['user', 'reg_date', 'name', 'family', 'phoneNumber']
и вид следующий:
class UserProfileView(viewsets.ViewSet):
def create(self, request):
UserProfile.objects.create(user = request.user)
Я отправляю пост-запрос с помощью axios следующим образом:
const a = await ProfileAPI.post('',
{
headers: {
'Authorization': mytoken
}
})
, в котором mytoken - это токен вошедшего пользователя, предоставленный dj-rest-auth API. Хотя токен в порядке и UserProfileView выполняется запросом, я получил следующую ошибку от django rest:
ValueError: Cannot assign "<django.contrib.auth.models.AnonymousUser object at 0x000001F069C59190>": "UserProfile.user" must be a "User" instance.
Я что-то упустил? Есть ли какая-то проблема с моим запросом или видом? Пожалуйста, помогите мне решить эту проблему
Как определяется аутентификация
Схемы аутентификации всегда задаются в виде списка классов. REST framework попытается аутентифицироваться с каждым классом в списке, и установит request.user
и request.auth
, используя возвращаемое значение первого класса, который успешно аутентифицируется.
Если ни один класс не аутентифицируется, request.user
будет установлен на экземпляр django.contrib.auth.models.AnonymousUser
, а request.auth
будет установлен на None
.
Значение request.user и request.auth для неаутентифицированных запросов может быть изменено с помощью параметров UNAUTHENTICATED_USER и UNAUTHENTICATED_TOKEN.
Настройки
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
]
}
Виды
from rest_framework.authentication import SessionAuthentication, BasicAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView
class ExampleView(APIView):
authentication_classes = [SessionAuthentication, BasicAuthentication]
permission_classes = [IsAuthenticated]
def get(self, request, format=None):
content = {
'user': str(request.user), # `django.contrib.auth.User` instance.
'auth': str(request.auth), # None
}
return Response(content)
Добавьте в settings.py
AUTH_USER_MODEL = '(app name).UserProfile'