Python 如何在Django Rest框架中检索OneToOneField关系的对象属性
我正在尝试使用OneToOneField扩展用户模型,以便为用户添加更多字段:Python 如何在Django Rest框架中检索OneToOneField关系的对象属性,python,django,django-models,django-rest-framework,Python,Django,Django Models,Django Rest Framework,我正在尝试使用OneToOneField扩展用户模型,以便为用户添加更多字段: class Userattribs(models.Model): user = models.OneToOneField(User) passcode = models.IntegerField(default=0) # about user organisation = models.CharField(max_length=100, null=True) desc
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。但是,当我检索单个项时,我不会获取Userattribs
###################################################
### 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,然后输入以下内容以测试代码:
#导入相关模型和序列化程序
从您的应用程序导入*
从您的_app.serializer导入*
#创建新用户
user=user.objects.create(username=“test”)
#创建链接到“user”对象的新用户属性
user\u attrib=Userattribs.objects.create(user=user,organization=“DJANGO”)
#序列化“用户”对象
user\u serializer=UserSerializer(用户)
#显示序列化数据
用户_serializer.data
#输出:{'last_name':'','userattribs':OrderedDict([('Organization','DJANGO'),('description',None)],'email':'','username':'test','first_name':'','id':3}
如果没有问题,问题可能来自您的视图。我看不到您的代码中有任何错误。您确定您的
User
对象具有Userattribs
对象吗
使用python manage.py shell
打开python shell,然后输入以下内容以测试代码:
#导入相关模型和序列化程序
从您的应用程序导入*
从您的_app.serializer导入*
#创建新用户
user=user.objects.create(username=“test”)
#创建链接到“user”对象的新用户属性
user\u attrib=Userattribs.objects.create(user=user,organization=“DJANGO”)
#序列化“用户”对象
user\u serializer=UserSerializer(用户)
#显示序列化数据
用户_serializer.data
#输出:{'last_name':'','userattribs':OrderedDict([('Organization','DJANGO'),('description',None)],'email':'','username':'test','first_name':'','id':3}
如果可以,问题可能来自您的观点。非常感谢您的回复。我按照指示做了,一切似乎都正常:/I我怀疑这可能与序列化程序有关,但在我看来是正确的。类UserDetail(generics.RetrieveUpdateDestroyAPIView):queryset=User.objects.all()序列化程序\u类=UserSerializer权限\u类=(访问权限,)欢迎使用。:)请将您的观点添加到您的问题中。感谢您对路易斯的帮助。我已经更新了这篇文章,我非常感谢你的回复。我按照指示做了,一切似乎都正常:/I我怀疑这可能与序列化程序有关,但在我看来是正确的。类UserDetail(generics.RetrieveUpdateDestroyAPIView):queryset=User.objects.all()序列化程序\u类=UserSerializer权限\u类=(访问权限,)欢迎使用。:)请将您的观点添加到您的问题中。感谢您对路易斯的帮助。我已经用我的视图更新了这篇文章,请添加你的
url.py
和UserDetail
视图的输出。这是什么access\u permission
变量?注释权限\u类以调试添加您的url.py
和UserDetail
的输出请查看。这是什么access\u permission
变量?注释要调试的类的权限