我的项目是关于大学系统的。定义了2个名为Student和Professor的自定义用户,这些自定义用户继承自Django用户模型。有一个课程模型与教授模型具有ManyToMany
关系,以定义课程并为每门课程定义教授。我使用CreateMixinModel
,UpdateMixinModel
,DestroyMixinModel
来更新,创建和删除课程。 CRUD已正确应用。
但是显示教授的信息时出现了问题,它只返回了教授ID。我在CourseCreateSErializer中使用了嵌套的序列化程序,以在课程信息旁边显示教授信息。现在,我无法编辑课程对象。
我希望能够编辑课程对象
models.py
:
class Professor(models.Model):
user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
professor_no = models.PositiveIntegerField()
def get_full_name(self):
return self.user.first_name
def __unicode__(self):
return self.user.first_name + " " + self.user.last_name
def __str__(self):
return self.user.first_name + " " + self.user.last_name
class Course(models.Model):
professor = models.ManyToManyField(Professor)
name = models.CharField(max_length=100)
unit = models.PositiveIntegerField()
serializers.py
:
class CustomUserSerializer(serializers.ModelSerializer):
class Meta:
model = CustomUser
fields = ('first_name',
'last_name',
'identity_no',
'email')
def create(self, validated_data):
return CustomUser.objects.create(**validated_data)
class ProfessorDetailSerializer(serializers.ModelSerializer):
user = CustomUserSerializer()
class Meta:
model = Professor
fields = (
'user',
'professor_no'
)
def create(self, validated_data):
return CustomUser.objects.create(**validated_data)
class CourseDetailSerializer(serializers.ModelSerializer):
professor =ProfessorDetailSerializer(many=True)
class Meta:
model = Course
fields = (
'professor',
'name',
'unit',
)
view.py
:
class CourseDetailView(DestroyModelMixin, UpdateModelMixin, RetrieveAPIView):
queryset = Course.objects.all()
serializer_class = CourseDetailSerializer
permission_classes = [IsAuthenticatedOrReadOnly]
def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs)
def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)