我有多种选择的嵌套序列化程序,我可以获取该值,但是在补丁调用期间[[主题没有得到更新]
这里用户和主题是两个模型,**Model.py**
class Subject(models.Model):
uid = models.AutoField(verbose_name='ID',
serialize=False,
auto_created=True,
primary_key=True)
ENG = "ENGLISH"
HND = "HINDI"
SUBJECT = (
(ENG, "English"),
(HND, "Hindi"),
)
subject = models.CharField(
max_length=50, choices=SUBJECT, default=ENG)
def __str__(self):
return self.subject
class User(AbstractUser):
uid = models.AutoField(verbose_name='ID',
serialize=False,
auto_created=True,
primary_key=True)
TEACHER = "Teacher"
STUDENT = "Student"
user_type = models.CharField(max_length=30, default=STUDENT)
approved = models.BooleanField(default=True)
def save(self, *args, **kwargs):
if self.user_type == User.TEACHER and self._state.adding:
self.approved = False
super().save(*args, **kwargs)
@property
def syllabus(self):
ret = self.teacher.syllabus_set.all()
if ret:
return ret
else:
return ''
这是我的序列化器调用
**serializers.py** class TeacherProfileDetails(serializers.ModelSerializer): logger = logging.getLogger(__name__) teacher_date = AvailabilityDetails(many=True, read_only=True) first_name = serializers.CharField(source='user.first_name', read_only=True) last_name = serializers.CharField(source='user.last_name', read_only=True) cities = CitySerializer(many=True, read_only=True) subject = serializers.SerializerMethodField() user = UserDetailsSerializer(read_only=True) class Meta: model = Teacher fields = ('user', 'first_name', 'last_name', 'bio', 'teacher_cost', 'subject', 'teacher_date', 'cities') def get_subject(self, obj): subject_list = [] for i in obj.subject.all(): subject_list.append(i.subject) return subject_list
这是我的views.py通话
**views.py** class TeacherListCreateAPIView(APIView): logger = logging.getLogger(__name__) #def create(self, request, *args, **kwargs): def get(self, request, *args, **kwargs): self.logger.info("Geeting TeacherListCreateAPIView information") teacherList = Teacher.objects.filter(user__username=kwargs["username"]) self.logger.info(teacherList) serializers = TeacherProfileDetails(teacherList, many=True) self.logger.info(serializers.data) return Response(serializers.data) def patch(self, request, *args, **kwargs): teacher = Teacher.objects.get(user__username=kwargs['username']) serializers = TeacherProfileDetails(data=request.data, instance=teacher) self.logger.info(serializers) if serializers.is_valid(): serializers.save() return Response(serializers.data, status=status.HTTP_201_CREATED) return Response(serializers.errors, status=status.HTTP_400_BAD_REQUEST)
这里是urls.py
path('teacher/<str:username>/details', TeacherListCreateAPIView.as_view(), name="teacher-details"),
问题:中犯了一些错误我能够获得老师的详细信息,但补丁调用不会更新主题,看起来我在序列化主题时在
TeacherProfileDetails