为啥 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 是不是提供管理站点来管理模型?

断言错误:Django-rest-Framework

记录对 django-rest-framework 的请求

django-rest-framework、多表模型继承、ModelSerializers 和嵌套序列化器

django-rest-framework 按日期过滤=无