Django Rest Framework - Модель отношений с вложенными внешними ключами - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь реплицировать схему данных для данных, видимых здесь . Каждый запуск имеет местоположение с одиночной площадкой, моя модель в настоящее время определена, как показано ниже:

class Location(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=255, blank=True, default="")
    country_code = models.CharField(max_length=255, blank=True, default="")

def __unicode__(self):
    return self.name

class Meta:
    verbose_name = 'Location'
    verbose_name_plural = 'Locations'


class Pad(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=255, blank=True, default="")
    info_url = models.URLField(blank=True, null=True)
    wiki_url = models.URLField(blank=True, null=True)
    map_url = models.URLField(blank=True, null=True)
    location = models.ForeignKey(Location, related_name="pads", blank=True, on_delete=models.CASCADE)

def __unicode__(self):
    return self.name

class Meta:
    verbose_name = 'Pad'
    verbose_name_plural = 'Pads'

Если я запрашиваю запуск из оболочки Django или если я сериализую ( видно здесь ) запуск с Django Restframework, он вытягивает все пады , возможные для местоположения вместо один пэд, которому назначен запуск.

Пример:

"location": {
    "id": 16,
    "name": "Cape Canaveral, FL, USA",
    "country_code": "USA",
    "pads": [
        {
            "id": 62,
            "name": "Space Launch Complex 37B, Cape Canaveral, FL",
            "info_url": null,
            "wiki_url": "https://en.wikipedia.org/wiki/Cape_Canaveral_Air_Force_Station_Space_Launch_Complex_37",
            "map_url": "http://maps.google.com/maps?q=28.531700,-80.564950"
        },
        {
            "id": 84,
            "name": "Space Launch Complex 40, Cape Canaveral, FL",
            "info_url": "",
            "wiki_url": "https://en.wikipedia.org/wiki/Cape_Canaveral_Air_Force_Station_Space_Launch_Complex_40",
            "map_url": "http://maps.google.com/maps?q=28.56194122,-80.57735736"
        }
    ]

Как получить отношения, чтобы ТОЛЬКО правильно отображать только один пэд, назначенный для запуска, вместо того, чтобы возвращать все возможные пэды для местоположения, чтобы моя реализация соответствовала исходной функциональности, как показано в первой ссылке?

EDIT:

Хорошо, теперь данные находятся в базе данных в правильном формате, как показано в оболочке, запуск имеет одну площадку из местоположения. Оставшаяся проблема заключается в том, как сериализовать его, чтобы он возвращался точно так же, как исходный источник данных, с помощью launch-> location-> single-pad:

>>> launch = Launch.objects.first()
>>> launch
<Launch: Falcon Heavy | STP-2>
>>> launch.pad
<Pad: Launch Complex 39A, Kennedy Space Center, FL>
>>> launch.pad.location
<Location: Kennedy Space Center, FL, USA>
>>> launch.pad.location.pad.all()
<QuerySet [<Pad: Launch Complex 39A, Kennedy Space Center, FL>, <Pad: Launch Complex 39B, Kennedy Space Center, FL>]>
...