1

我是 Django 新手,我正在启动一个 Django 应用程序,我正在使用注册应用程序和 Django rest 框架,这个应用程序也将作为 iOS 应用程序的后端,我已经设法从 iOS 应用程序创建用户并从浏览器编辑用户配置文件,我需要帮助找到一种方法,让用户在登录后编辑他的配置文件详细信息。我尝试将“user.username”之类的查找字段设置为 UserProfileViewSet,以便我可以访问 UserProfile 对象并对其进行编辑,但这不起作用。

我还认为我可以在登录后以某种方式返回用户 ID,并使用此 ID 来引用我想编辑的用户配置文件,但这似乎根本不实用。你觉得怎么样??

我发现这样做的其他方法是调用 user.get_profile() 但我不知道如何从 iOS 应用程序中完成这项工作。

这是我的 UserProfile 模型和序列化程序,任何帮助都会很棒。谢谢

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')

我使用这样的信号创建 UserProfile

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)
4

2 回答 2

1

你没有发布你的ViewSet代码,所以我不得不猜测。但是你model应该设置为User并且你的lookup_field应该设置为username

就像是:

class UserViewSet(ModelViewSet):
    model = User
    lookup_field = "username"
于 2014-03-19T06:25:40.503 回答
1

对于每个试图为用户获取个人资料的人来说,这是我设法做到这一点的方式,这要归功于 Kevin 的帮助。

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(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"
    }
于 2014-03-19T17:36:40.113 回答