【发布时间】:2020-07-30 00:24:01
【问题描述】:
类似于this question,但我没有命名空间或基本名称,因此该问题中的解决方案均无效。
我有 2 个模型: 组织 学生
学生可以属于一个组织。
当我检索一个组织时,我希望返回的 JSON 中有一个子对象,它将“相关”学生列为超链接 url(根据 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
]
所以这应该可以工作,因为这是非常样板的代码。或者我有什么不明白的地方?
【问题讨论】:
标签: python django django-rest-framework