Я пытаюсь найти модель UserProfile
, используя поле, унаследованное от модели User
.Как я могу получить доступ к полю имени пользователя из модели User
в представлении UserProfile
?
Я использую Django REST framework 3.9.И, насколько я понимаю, использование аннотации @property
в определении модели позволяет сериализовать это поле.И я использую это сериализованное поле как lookup_field
в представлении.
Это модель UserProfile
.
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
bio = models.TextField(max_length=500, null=True, blank=True)
birth_date = models.DateField(null=True, blank=True)
@property
def username(self):
return self.user.username
Это сериализатор.
class UserProfileSerializer(serializers.ModelSerializer):
class Meta:
model = UserProfile
fields = [
'user',
'username',
'bio',
'birth_date'
]
Это представление.
class UserProfileAPIView(generics.RetrieveUpdateAPIView):
# permission_classes = [permissions.IsAuthenticated]
serializer_class = UserProfileSerializer
lookup_field = 'username'
def get_queryset(self):
return UserProfile.objects.all()
def get_serializer_context(self, *args, **kwargs):
return {'request': self.request}
Это URL-адрес API.
path('<str:username>/profile/', UserProfileAPIView.as_view(), name='profile'),
Я ожидал, что API вернет: username, bio, birth_date
, но получил эту ошибку: «Невозможно разрешить ключевое слово« имя пользователя »в поле. Возможные варианты: био, дата рождения, идентификатор, пользователь, идентификатор пользователя» .