Ich habe zwei Modelle Patient
und Docter
.Django Rest Framework: Wie Rest API-Endpunkt für ein geschachtelte Modelle [ManyToMany Felder] hinzufügen?
# models.py
class Docter(models.Model):
...
class Patient(models.Model):
...
cared_by = models.ManyToManyField(Docter)
Jetzt habe ich und ModelViewSet
, die die grundlegenden CRUD-Operationen für das Modell Griff User
.
#viewsets.py
class PatientViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows patients to be viewed or edited.
"""
queryset = Patient.objects.all()
serializer_class = PatientSerializer
permission_classes = (permissions.IsAuthenticated,)
def get_queryset(self):
return Patient.objects.filter(cared_by__in = [self.request.user])
# Automatically add to cared by when creating object
def perform_create(self, serializer):
serializer.save(cared_by = [self.request.user])
und ich kann auf diese Ansicht mit dem /users/
Endpunkt zugreifen. Jetzt möchte ich diesen Endpunkt erweitern, um grundlegende CRUD-Operationen für das cared_by
Feld auf Patient
Modell durchzuführen.
Damit wird /users/2/docters
ein anderer Endpunkt.
POST /users/2/docters/
tun können patientinstance.cared_by.add(docter)
GET /users/2/docters/
zurückkehren können patientinstance.cared_by.all()
/users/2/docters/5
DELETE kann patientinstance.cared_by.remove(docter)
tun
Aber jetzt die einzige Art, wie ich dies zu tun ist, um durch das Hinzufügen von benutzerdefinierten @detail_routes einfiel die PatientViewSet
. Das sieht nach einer sehr schlechten Übung aus und ich wiederhole viel Code.
Also kann mir bitte jemand sagen, wie man das richtig macht.
Lieber Darwesh, hat meine Lösung Ihnen geholfen? – iulian