【问题标题】: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
    }
}

我该如何解决这个问题? 谢谢

【问题讨论】:

    标签: django django-rest-framework django-orm django-serializer


    【解决方案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')
    

    【讨论】:

    • 很高兴为您提供帮助)
    猜你喜欢
    • 2017-03-07
    • 1970-01-01
    • 2016-10-31
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 2018-05-19
    相关资源
    最近更新 更多