如何在 Django Rest Framework 中为一个模型添加其他字段,该模型是另一个模型的外键
How to add additional field in Django Rest Framework for a model that is a foreign key on another model
我想在 Django 休息框架中列出某个部门的所有教师,但不确定如何这样做。我相信这可以通过向 Department 序列化程序添加一个字段来完成,但我不确定。有没有简单的方法可以做到这一点。
models.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()
serializers.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']
urls.py
router = DefaultRouter()
router.register(r'teachers', TeacherViewSet)
router.register(r'departments', DepartmentViewSet)
router.register(r'users', UserViewSet)
urlpatterns = [
path('api/', include(router.urls)),
]
views.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]
您可以使用 mydepartment.teacher_set.all()
访问链接到 department
的 Teacher
,我们可以在序列化程序中使用它,例如:
class <strong>TeacherSerializer</strong>(serializers.HyperlinkedModelSerializer):
class Meta:
model = Teacher
fields = ['name', 'tenure']
class DepartmentSerializer(serializers.HyperlinkedModelSerializer):
<strong>teacher_set = serializers.TeacherSerializer(many=True)</strong>
class Meta:
model = Department
fields = ['url', 'name', 'teacher_set']
我想在 Django 休息框架中列出某个部门的所有教师,但不确定如何这样做。我相信这可以通过向 Department 序列化程序添加一个字段来完成,但我不确定。有没有简单的方法可以做到这一点。
models.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()
serializers.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']
urls.py
router = DefaultRouter()
router.register(r'teachers', TeacherViewSet)
router.register(r'departments', DepartmentViewSet)
router.register(r'users', UserViewSet)
urlpatterns = [
path('api/', include(router.urls)),
]
views.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]
您可以使用 mydepartment.teacher_set.all()
访问链接到 department
的 Teacher
,我们可以在序列化程序中使用它,例如:
class <strong>TeacherSerializer</strong>(serializers.HyperlinkedModelSerializer):
class Meta:
model = Teacher
fields = ['name', 'tenure']
class DepartmentSerializer(serializers.HyperlinkedModelSerializer):
<strong>teacher_set = serializers.TeacherSerializer(many=True)</strong>
class Meta:
model = Department
fields = ['url', 'name', 'teacher_set']