我想在 Django rest 框架中列出某個部門的所有教師,但不確定如何這樣做。我相信這可以通過向 Department 序列化程式添加一個欄位來完成,但我不確定。有沒有一種簡單的方法可以做到這一點。
模型.py
class Department(models.Model):
name = models.CharField(max_length=300)
def __str__(self):
return self.name
class Teacher(models.Model):
name = models.CharField(max_length=300)
department = models.ForeignKey(Department, on_delete=models.CASCADE)
tenure = models.BooleanField()
序列化程式.py
class DepartmentSerializer(serializers.HyperlinkedModelSerializer):
#What I believe the serializer field would look like to list teachers connected
#with a department
teacher = serializers.DjangoModelField(
Teacher.objects.filter(department=self.department))
class Meta:
model = Department
fields = ['url', 'name', 'teacher']
網址.py
router = DefaultRouter()
router.register(r'teachers', TeacherViewSet)
router.register(r'departments', DepartmentViewSet)
router.register(r'users', UserViewSet)
urlpatterns = [
path('api/', include(router.urls)),
]
視圖.py
class TeacherViewSet(viewsets.ModelViewSet):
queryset = Teacher.objects.all()
serializer_class = TeacherSerializer
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
class DepartmentViewSet(viewsets.ModelViewSet):
queryset = Department.objects.all()
serializer_class = DepartmentSerializer
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
uj5u.com熱心網友回復:
您可以訪問Teacher鏈接到departmentwith的s mydepartment.teacher_set.all(),我們可以在序列化程式中使用它,例如:
class TeacherSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Teacher
fields = ['name', 'tenure']
class DepartmentSerializer(serializers.HyperlinkedModelSerializer):
teacher_set = serializers.TeacherSerializer(many=True)
class Meta:
model = Department
fields = ['url', 'name', 'teacher_set']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/324952.html
上一篇:將4個下載的檔案合并為一個
