[英]How can I serialize the OneToOneField to be list in Django-Rest-Framework?
[英]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.