В настоящее время я разрабатываю веб-приложение, которое использует API в качестве бэкенда для университетского проекта.
И я читал, что DRF - это самый быстрый и простой способ разработки и развертывания API, я уже прошел весь их официальный
документации, и я, кажется, не понимаю, как я мог сделать следующее в их ViewSet и Serializer.
Вот одна конечная точка моего API, называемая аэропортами.
Все аэропорты доступны в США
Возвращает список ссылок json / csv на доступные аэропорты в США.
URL
/airports
Метод:
GET
Успешный ответ:
[
{
"airport": {
"code": "PHL",
"name": "Philadelphia, PA: Philadelphia International",
"id": 123,
"url": "/airports/123"
},
{
"airport": {
"code": "AHR",
"name": "American Hour Rapid",
"id": 125,
"url": "/airports/125"
}
.
.
.
]
Показать информацию об аэропорте
Возвращает все ссылки на перевозчиков, работающих в конкретном аэропорту , ссылку на соответствующую статистику за определенный месяц и год, а также ссылку на маршруты аэропортов. Если в случае, если не указан ни год, ни месяц, по умолчанию будет использоваться дата с самой последней датой.
/airports/:id
GET
URL-параметры
Требуется:
id=[integer]
Успешный ответ:
{
"airport": {
"code": "PHL",
"name": "Philadelphia, PA: Philadelphia International",
"id": 123,
"url": "/airports/123"
},
"routes_link": "/airports/123/routes",
"carriers": [
{
"id": 124,
"url": "/carriers/124?airport_id=123",
"statistics_url":"/airports/1carrier=124&statistics='flights'"
},
.
.
.
]
}
Мне удалось сделать / аэропорты правильно перечисляя все доступные аэропорты в базе данных, но при использовании ViewSet я не знаю, как «настроить» ответ при попытке получить информацию только об одном аэропорту, указанном идентификатором и в приложении маршруты будут генерироваться динамически, и я планировал добавить в тело ответа, а не другое поле в модели.
Модель:
class Carrier(models.Model):
code = models.CharField(max_length=10)
name = models.TextField()
#airports = models.ManyToManyField(Airport)
def __str__(self):
return self.name
class Airport(models.Model):
code = models.CharField(max_length=10)
name = models.TextField()
carriers = models.ManyToManyField(Carrier, related_name='airports')
def __str__(self):
return self.name
сериализаторы:
class AirportSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = models.Airport
fields = ('id', 'name', 'code', 'url')
class CarrierSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = models.Carrier
fields = ('id', 'name', 'code', 'url')
Вид:
class AirportList(viewsets.ModelViewSet):
queryset = models.Airport.objects.all()
serializer_class = AirportSerializer
# @Override something here?
У кого-нибудь есть совет, как я могу подойти к этому, используя DRF или любой другой учебный материал, который я могу использовать?