简体   繁体   English

如何在 Django Rest Framework 中为作为另一个模型上的外键的模型添加附加字段

[英]How to add additional field in Django Rest Framework for a model that is a foreign key on another model

I am looking to list out all of the teachers in a certain department in Django rest framework and am unsure of how to do so.我想在 Django rest 框架中列出某个部门的所有教师,但不确定如何这样做。 I believe this would be done by adding a field to the Department serializer but I am not sure.我相信这可以通过向 Department 序列化程序添加一个字段来完成,但我不确定。 Is there an easy way of how this can be done.有没有一种简单的方法可以做到这一点。

models.py模型.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序列化程序.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网址.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视图.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]

You can access the Teacher s linked to a department with mydepartment.teacher_set.all() , we can use that in the serializer like:您可以使用mydepartment.teacher_set.all()访问与department链接的Teacher s,我们可以在序列化程序中使用它,例如:

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']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用Django REST框架与外键的默认值模型? - How to use Django REST framework with a model with default value for foreign key? Django / Django Rest Framework-如何允许模型序列化程序将模型的外键字段设置为null? - Django/Django Rest Framework - How do I allow model serializer to set model's foreign key field to null? 在DJANGO模型中添加条件外键字段 - Add a conditional foreign key field in a DJANGO model Django-如何将外键选择限制为另一个模型中的ManyToMany字段 - Django - How to restrict Foreign Key choices to a ManyToMany field in another model 在带有 Django Rest Framework 的 Django 模型中使用 uuid 作为外键 - Use uuid as foreign Key in a model in Django with Django Rest Framework Django 模型将外键设置为另一个模型的字段 - Django Model set foreign key to a field of another Model Django Rest Framework:序列化模型并按其他数据的外键分组 - Django Rest Framework: Serializing a model and grouping by a foreign key for other data Django rest框架外键约束失败创建模型 - Django rest framework foreign key constraint fails creating model 如何在django rest框架中获取所有字段,该框架在带有外键的不同模型中被定义为相关名称? - How to get all fields in django rest framework which is defined as related name in a diffent model with foreign key? 使用其他模型的外键测试Django模型 - Test django model with foreign key to another model
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM