Получение текущего пользователя Django в приложении для iOS

Я новичок в Django, я запускаю приложение Django, я использую приложение регистрации и Django rest framework, это приложение также будет служить бэкендом для приложения iOS, мне уже удается создавать пользователей из приложения iOS и редактировать профили пользователей из браузера, мне нужна помощь, чтобы найти подход, который позволяет пользователю редактировать данные своего профиля после того, как он вошел в систему. Я попытался установить поле поиска, например, "user.username", в User ProfileViewSet, чтобы я мог получить доступ к объекту User Profile. и отредактируйте его, но это не сработало.

Я также подумал, что смогу как-то вернуть идентификатор пользователя после входа в систему и использовать этот идентификатор для ссылки на профиль пользователя, который я хочу отредактировать, но это не кажется практичным вообще. Как вы думаете??

Другой способ, который я нашел, - это вызвать user.get_profile(), но я не знаю, как я могу заставить это работать из приложения iOS.

Вот моя модель User Profile и сериализаторы, любая помощь будет отличной. Спасибо

class UserProfile(models.Model):
user = models.OneToOneField(User, unique=True)
# Extra attribuets
pagetitle = models.TextField(null=False)
location = models.TextField(null=True)
website = models.TextField(null=True)
bio = models.TextField(null=True)
sex = models.TextField(null=True)
birthdate = models.DateField(null=True)
def __unicode__(self):
    return "%s's profile" % self.user

def create_profile(sender, instance, created, **kwargs):
    if created:
        profile, created= UserProfile.objects.get_or_create(user=instance)

post_save.connect(create_profile, sender=User)


class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ('username','email','password')

class UserProfileSerializer(serializers.HyperlinkedModelSerializer):
    user = UserSerializer(many=False)
    class Meta:
        model = UserProfile
        fields = ('user','bio')

Я создаю User Profile, используя такой сигнал

def create_profile(sender, instance, created, **kwargs):
    if created:
        profile, created= UserProfile.objects.get_or_create(user=instance)

post_save.connect(create_profile, sender=User)

2 ответа

Решение

Для всех, кто пытается получить профиль для пользователя, я смог сделать это благодаря помощи Кевина.

class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        depth = 1
        fields = ('id','username','email','profile')



class CurrentUserView(APIView):
    def get(self, request):
        serializer = UserSerializer(request.user)
        return Response(serializer.data)

Используя URL, как это

url(r'^api/current-user',CurrentUserView.as_view(),
        name="current_user"),

Вы получите такой ответ

"id": 1, 
    "username": "username", 
    "email": "email@email.com", 
    "profile": {
        "id": 1, 
        "user": 1, 
        "bio": "My Bio", 
        "sex": "M", 
        "birthdate": "1987-12-02"
    }

Вы не опубликовали свой ViewSet код, так что я должен угадать. Но твой model должен быть установлен в User и ваш lookup_field должен быть установлен в username,

Что-то вроде:

class UserViewSet(ModelViewSet):
    model = User
    lookup_field = "username"
Другие вопросы по тегам