Как показать детали модели, связанной с другой? - PullRequest
1 голос
/ 10 ноября 2019

Мне нужно, чтобы при 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 голосов
/ 10 ноября 2019

Добро пожаловать в 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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...