如何显示与其他模型相关的模型的详细信息?

时间:2019-11-10 13:18:07

标签: django-rest-framework

我需要使用URL,例如localhost:8000 / apirest / customers

Customers是一个分配了角色Role的表,我需要显示Role的所有字段

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
      }

}

1 个答案:

答案 0 :(得分:0)

欢迎来到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)

您想要做的是serializing relations,对于您的情况,它将是这样的:

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']