为啥 django-rest-framework 不显示 OneToOneField 数据 - django
Posted
技术标签:
【中文标题】为啥 django-rest-framework 不显示 OneToOneField 数据 - django【英文标题】:Why django-rest-framework doesn't display OneToOneField data - django为什么 django-rest-framework 不显示 OneToOneField 数据 - django 【发布时间】:2018-02-16 16:26:13 【问题描述】:我想在我的网站中设置 Restful API。我使用了 django-rest-framework。 当我从数据库中获取对象时,它不显示相关对象。
sn-p下面是我的第一个模型(父模型):
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='profile',on_delete=models.CASCADE)
name = models.CharField(max_length=30)
family = models.CharField(max_length=50)
下面的sn-p是我的第二个模型(子模型):
class Klass(models.Model):
title = models.CharField(max_length=50)
description = models.CharField(max_length=500)
teacher = models.ForeignKey(Profile,related_name='teacher', on_delete=models.CASCADE)
university = models.CharField(max_length=50, blank=True, null=True)
正如您在第二个 sn-p 中看到的,teacher
的值来自 Profile
模型。
但在 django-rest-framework API 视图中,它不显示教师的姓名,而是显示pk
。
下面的 sn-ps 是我的序列化器和视图:
# serializer
class KlassSerializer(serializers.ModelSerializer):
class Meta:
model = Klass
fields = ('id', 'title', 'description', 'teacher')
# view
class KlassView(APIView):
def get(self, request, pk=None):
if pk is not None:
klass = Klass.objects.filter(pk=pk).get()
serializer = KlassSerializer(klass)
return Response('message': 'class get ', 'data': serializer.data,)
结果如下:
"message": "class get ",
"data":
"id": 13,
"title": "ُThe First Class",
"description": "Nothing for now!",
"teacher": 2
我该如何解决这个问题? 谢谢
【问题讨论】:
【参考方案1】:试试看,更详细nested-relationships
class TeacherSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = ('name')
class KlassSerializer(serializers.ModelSerializer):
teacher = TeacherSerializer(read_only=True)
class Meta:
model = Klass
fields = ('id', 'title', 'description', 'teacher')
【讨论】:
很高兴为您提供帮助)以上是关于为啥 django-rest-framework 不显示 OneToOneField 数据 - django的主要内容,如果未能解决你的问题,请参考以下文章
django-rest-framework:如何序列化已经包含 JSON 的字段?
django-rest-framework 是不是提供管理站点来管理模型?