Как мне перенаправить мой вызов API, чтобы собрать все объекты с ForeignKey, подключенным к конкретному экземпляру модели? - PullRequest
0 голосов
/ 14 марта 2019

Цель, которую я пытаюсь достичь, - запросить всю конкретную модель, имеющую отношение ForeignKey с отдельным экземпляром другой модели.

Мне любопытно, как будет выглядеть правильный способ маршрутизации вызова API. Мысль / надежда, что это будет выглядеть примерно так:

'/api/v1/devices/<id>/breadcrumbs'

Я новичок в Django Rest Framework и не знаю, что здесь делать. Я создал основные Viewsets, как показано ниже:

class DeviceViewSet(viewsets.ModelViewSet):
    queryset = Device.objects.all()
    serializer_class = DeviceSerializer

class BreadcrumbViewSet(viewsets.ModelViewSet):
    queryset = Breadcrumb.objects.all()
    serializer_class = BreadcrumbSerializer

А также основные маршруты:

router.register(r'devices', DeviceViewSet)
router.register(r'breadcrumbs', BreadcrumbViewSet)

И модель "Хлебная крошка":

class Breadcrumb(models.Model):
    timestamp = models.DateTimeField(
        auto_now_add=True,
        editable=False,
        null=False,
        blank=False
    )
    device = models.ForeignKey(
        Device, 
        on_delete=models.CASCADE
    )

Но не знаю, как распространить это на логику, которую я стремлюсь достичь.

1 Ответ

1 голос
/ 14 марта 2019

Есть проект, который может вас заинтересовать, вот официальная документация .

Таким образом, вы можете создать urls.py как:

from rest_framework_nested import routers

device_router = routers.SimpleRouter()
device_router.register(r'devices', DeviceViewSet)

device_breadcrumbs_router = routers.NestedSimpleRouter(device_router, r'breadcrumbs', lookup='breadcrumb')
device_breadcrumbs_router.register(r'breadcrumbs',BreadcrumbViewSet)

А внутри переопределения BreadcrumbViewSet:

def get_queryset(self):
    device_id = self.kwargs.get('device',None)

    return Breadcrumb.objects.filter(device_id=device_id)

Точно так же, как вы переопределяете 'get_queryset', вы можете получить тот же результат в 'execute_create', 'execute_update' и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...