Аналогично этому вопросу , но у меня нет пространств имен или базовых имен, поэтому ни одно из решений в этом вопросе не сработало.
У меня есть 2 модели: Организация Учащийся
Студент может принадлежать к организации.
Когда я получаю организацию, я хочу, чтобы дочерний объект в возвращенном JSON отображал «связанных» учеников в виде гиперссылок (согласно HATEOS). ).
models.py
class Organisation(TimeStampedModel):
objects = models.Manager()
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Student(TimeStampedModel):
objects = models.Manager()
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.EmailField(unique=True)
organisation = models.ForeignKey(to=Organisation, on_delete=models.SET_NULL, default=None, null=True, related_name='students')
serializers.py
class OrganisationSerializer(serializers.ModelSerializer):
students = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='student-detail', lookup_url_kwarg='organisation_id')
class Meta:
model = Organisation
fields = ('id', 'name','students')
class StudentSerializer(serializers.ModelSerializer):
class Meta:
model = Student
fields = '__all__'
urls.py
from rest_framework import routers
from .views import OrganisationViewSet, StudentViewSet
from django.conf.urls import url
router = routers.DefaultRouter()
router.register(r'api/v1/organisations', OrganisationViewSet)
router.register(r'api/v1/students', StudentViewSet)
urlpatterns = router.urls
views.py
from .models import Organisation, Student
from rest_framework import viewsets, permissions
from .serializers import OrganisationSerializer, StudentSerializer
# Organisation Viewset
class OrganisationViewSet(viewsets.ModelViewSet):
queryset = Organisation.objects.all()
serializer_class = OrganisationSerializer
permission_classes = [
permissions.AllowAny
]
# Student Viewset
class StudentViewSet(viewsets.ModelViewSet):
queryset = Student.objects.all()
serializer_class = StudentSerializer
permission_classes = [
permissions.AllowAny
]
Так что это должно работать, так как это довольно красивый код. А может я чего-то не понимаю?