Django RestFramework序列化关系,如何获取两个模型的数据



模式为:

class Userinfo(models.Model):
    class Meta:
        verbose_name='用户信息'
        verbose_name_plural='用户信息'
    user=models.OneToOneField(
        User,
        related_name='userinfo',
        on_delete=models.CASCADE,
        verbose_name='用户'
    )
    location=models.BooleanField(verbose_name='地点(勾选宏达,否则福年)')

和RESTFRAMEWORK代币类:

@python_2_unicode_compatible
class Token(models.Model):
    """
    The default authorization token model.
    """
    key = models.CharField(_("Key"), max_length=40, primary_key=True)
    user = models.OneToOneField(
        settings.AUTH_USER_MODEL, related_name='auth_token',
        on_delete=models.CASCADE, verbose_name=_("User")
    )
    created = models.DateTimeField(_("Created"), auto_now_add=True)

我的串行序列是:

class UserinfoSerializer(serializers.ModelSerializer):
    class Meta:
        model=Userinfo
        fields="__all__"
class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model=User
        exclude=('password',)
    userinfo=UserinfoSerializer()
class TokenSerializer(serializers.ModelSerializer):
    class Meta:
        model=Token
        fields = '__all__'
        depth=3
    user = UserSerializer()

我想响应用户的数据和一对一的型号UserInfo,但我只是得到用户。我可以做什么?

这是我目前的令牌序列化数据数据的结果,并且UserInfo为null,如何获取UserInfo数据?

{
    "key": "2012964fb4ffe07dc58c33a64d0ce48bedd34643",
    "user": {
        "id": 3,
        "userinfo": null,
        "last_login": null,
        "is_superuser": false,
        "username": "333",
        "first_name": "叶同学",
        "last_name": "",
        "email": "",
        "is_staff": false,
        "is_active": true,
        "date_joined": "2017-12-08T16:39:00+08:00",
        "groups": [],
        "user_permissions": []
    },
    "created": "2017-12-14T10:40:58.933072+08:00"
}

添加Usererializer的类Meta

depth = 1  

使用UserInfoserializer用于userInfo = userInfoserializer(source =" userInfo")

喜欢

class UserSerializer(serializers.ModelSerializer):
    userinfo = UserinfoSerializer(source="userinfo")
    class Meta:
        depth = 2
        model=User
        **fields = ('userinfo')** # You missed this that's why you used depth but it was not working for you. Please replicate same in TokenSerializer

请参阅下面的编辑

class TokenSerializer(serializers.ModelSerializer):
    user = UserSerializer()
    class Meta:
        model=Token
        fields = ('__all__','user')
        depth=3       

可能是全部,您需要提及所需的字段。