Вы определяете эти поля на вашем сериализаторе:
class StudentDataMigrateSerializer(serializers.Serializer):
name = serializers.CharField()
sex = serializers.CharField()
registration_no = serializers.CharField()
И возвращение student
объекта в вашем create
методе:
def create(self,validated_data):
...
return student
Когда вы отправляете запрос к этой конечной точке, StudentDataMigrateCreateAPIVIew
создает сериализатор (StudentDataMigrateSerializer
) с использованием данных запроса и проверяет их. Если проверка прошла успешно, она вызывает create
метод сериализатора. Все хорошо до сих пор. После создания экземпляра представление также должно возвращать ответ. Таким образом, он возвращает data
атрибут сериализатора.
На данный момент serializer.data
фактически представляет собой объект ученика, который вы вернули в своем методе create
. Ваш сериализатор пытается вернуть представление на основе полей, определенных в нем.
Это ваши определенные поля при сериализации: name
, sex
, registration_no
. Но модель Student
, следовательно, у объекта student
нет поля registration_no
. Таким образом, ваш сериализатор не работает, когда он пытается получить это поле для student
объекта.
Вы можете сделать registration_no
поле write_only
, чтобы оно не возвращалось в ответ.
class StudentDataMigrateSerializer(serializers.Serializer):
name = serializers.CharField()
sex = serializers.CharField()
registration_no = serializers.CharField(write_only=True)