Cześć,
mam pewien problem z rozszerzeniem profilu użytkownika w moim api.
Przeszukałem trochę sieci, nie znalazłem jednak satysfakcjonującego mnie rozwiązania, dlatego piszę tutaj.
Tworzę sobie model Profilu użytkownika:
class UserProfile(models.Model):
user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE)
test_field = models.CharField(max_length=640, blank=True)
def __str__(self):
return self.user.username
def create_user_profile(sender, instance, created, **kwargs):
if created:
profile, created = UserProfile.objects.get_or_create(user=instance)
post_save.connect(create_user_profile, sender=get_user_model())
views.py
class UserProfileViewSet(viewsets.ModelViewSet):
serializer_class = UserProfileSerializer
permission_classes = (IsAuthenticated,) # (IsAuthenticated, IsAdminOrReadOnly) # todo !!!!!!!!!
# to get data only for current user.
def get_queryset(self):
return UserProfile.objects.filter(user=self.request.user)
serializers.py
class UserProfileSerializer(serializers.ModelSerializer):
class Meta:
model = UserProfile
fields = '__all__'
Podczas tworzenia nowego użytkownika tworzy mi się od razu profil tego użytkownika. Jednak bez uzupełnionych pól UserProfile.
Problem w tym, że nie bardzo wiem, jak wówczas podczas rejestracji jednocześnie przekazać pola modelu UserProfile.
W tej chwili używając Postmana w body wpisuję jedynie username, password oraz password1. (a chciałbym móc wpisać też pola modelu UserProfile) W zamian otrzymuję Token, zarejestrowanego Usera oraz przypisany mu UserProfil- bez wpisanych wartości pól UserProfile. (w powyższym przykładzie test_field)
Jak to ugryźć?
Pomyślałem, że ewentualnie wystarczy, że po rejestracji użytkownika - zalogowany użytkownik uzupełni tylko pola UserProfile (w sensie zamiast robienia tego podczas rejestracji)
Uzupełnienie pól UserProfile zarejestrowanego wcześniej użytkownika - z panelu administracyjnego django - działa bez problemu. Z Postmana - niestety mam problem.
W sensie, wysyłałem na endpoint http://localhost:8000/auth/login/ login i hasło, otrzymałem Token, następnie używając tego tokena wysyłałem POST z postmana i otrzymuję błąd jak poniżej:
Wyżej pokazany błąd to tylko przykład, oczywiście wiem, że wpisane tam dane nie są właściwe.
Ogółem zależy mi, żeby zrobić to możliwie w prosty i bezpieczny sposób - uczę się trochę django, trochę react i na ogół chodzi o to, żeby potem wykorzystać taką funkcjonalność w frontendzie zbudowanym w React.
Przy okazji - czy dokumentacja django/drf będzie najlepszym wyborem podczas nauki i próby budowania aplikacji od podstaw? A może polecacie coś innego?
- screenshot-20200917213340.png (14 KB) - ściągnięć: 7
- screenshot-20200917213510.png (23 KB) - ściągnięć: 7