首页 > 解决方案 > 如何显示与其他模型相关的模型的详细信息?

问题描述

例如,当 URL 时,我需要 localhost:8000/apirest/customers

客户是分配了表角色的表,我需要显示角色的所有字段

class Customer(models.Model):
    Id = models.AutoField(primary_key=True)
    Name = models.CharField(max_length=60)
    Address = models.CharField(max_length=60)
    Phone =  models.CharField(max_length=60)
    Role = models.ForeignKey(Role, on_delete=models.CASCADE)

   class Role(models.Model):
        Id = models.AutoField(primary_key=True)
        Description = models.CharField(max_length=60)
        Premium = models.BooleanField()

这只是一个例子,我需要 Json 显示这样的东西

{
     "Id":1,
     "Name":"Jhon Carter",
     "Adress": "Lombard Street"
     "Phone": "25 56592552",
     "Role":{
           "Id":1,
           "Description":"Description 1"
           "Premium": true
      }

}

标签: django-rest-framework

解决方案


欢迎来到 SO Jorge。

首先你的模型编译成功了吗?因为在这一行:

Role = models.ForeignKey(Role, on_delete=models.CASCADE)

我明白Undefined Role这是因为角色定义在下一行。所以我将模型定义更改为:

class Customer(models.Model):
    class MyRole(models.Model):
        Id = models.AutoField(primary_key=True)
        Description = models.CharField(max_length=60)
        Premium = models.BooleanField()

    Id = models.AutoField(primary_key=True)
    Name = models.CharField(max_length=60)
    Address = models.CharField(max_length=60)
    Phone = models.CharField(max_length=60)
    Role = models.ForeignKey(MyRole, on_delete=models.CASCADE)

您想要做的是序列化关系,对于您的情况,这将是这样的:

from rest_framework import serializers
from core.models import Customer


class RoleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Customer.MyRole
        fields = ['Id', 'Description', 'Premium']


class CustomerSerializer(serializers.ModelSerializer):
    Role = RoleSerializer(many=False, read_only=True)

    class Meta:
        model = Customer
        fields = ['Id', 'Name', 'Address', 'Phone', 'Role']

推荐阅读