繁体   English   中英

如何在Django-Rest-Framework中检索OneToOneField关系的对象属性

[英]How to retrieve object attributes of an OneToOneField relation in Django-Rest-Framework

我正在尝试使用OneToOneField扩展User模型,以便可以向用户添加更多字段:

class Userattribs(models.Model):    
    user = models.OneToOneField(User)
    passcode = models.IntegerField(default=0)

    # about user
    organisation = models.CharField(max_length=100, null=True)
    description = models.CharField(max_length=300, null=True)

我还有以下模型序列化器:

class UserattribsSerializer(serializers.ModelSerializer):   
    class Meta:
        model = Userattribs

        fields = ('organisation', 'description')

class UserSerializer(serializers.ModelSerializer):
    userattribs = UserattribsSerializer(required=True)

    class Meta:
        model = User

        fields =('id', 'username', 'first_name', 'last_name', 'email', 'userattribs') 

我遇到的问题是用户的序列化,在json响应中不包含“ userattribs”。 我已经花了几个小时谷歌搜索和敲打我的头。 如果您帮助我,我将不胜感激。

提前致谢!

我已经添加了视图。 我注意到的一件奇怪的事是,当我查询(使用UserList)所有数据时,我会得到Userattribs。 但是,当我检索单个项目时,没有得到用户attrib

###################################################
### Views #########################################
###################################################
class UserList(generics.ListCreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    permission_classes = (permissions.AllowAny,)

class UserDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    permission_classes = (access_permission,)

我看不到您的代码中有任何错误。 您确定您的User对象具有Userattribs对象。

使用python manage.py shell打开python shell并输入以下内容以测试您的代码:

#import your related models and serializer
from your_app.models import *
from your_app.serializer import *
# create new user
user = User.objects.create(username="test")
# create new user attrib linked to `user` object
user_attrib = Userattribs.objects.create(user=user, organisation="DJANGO")
# serialize your `user` object
user_serializer = UserSerializer(user)
# display your serialized data
user_serializer.data
# outputs : {'last_name': '', 'userattribs': OrderedDict([('organisation', 'DJANGO'), ('description', None)]), 'email': '', 'username': 'test', 'first_name': '', 'id': 3}

如果可以,则问题可能出在您的观点上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM