В настоящее время я использую успокоительные и сериализаторы для создания и обновления моего пользователя. Почему-то я не могу обновить некоторые поля, если это поле имеет отношение к OneToOneField/ForeignKey.Как обновить OneToOneField/ForeignKey с помощью ViewSet? Django
в моем models.py, мой студент фактически подключен к Джанго построить в пользовательской модели, которая включает в себя электронную почту пользователя и подключены к модели школы, которая имеет название школы
class Student(Model):
user = OneToOneField(settings.AUTH_USER_MODEL, on_delete=CASCADE)
date_of_birth = DateField(blank=True, null=True)
student_name = CharField(max_length=256)
school = ForeignKey(School,
on_delete=CASCADE,
related_name="%(class)ss",
related_query_name="%(class)s",
blank=True,
null=True)
в сериализаторе. ру у меня есть
class StudentSerializer(ModelSerializer):
user_email = SerializerMethodField()
school_name = SerializerMethodField()
class Meta:
model = Student
fields = (
'user_email', 'student_name', 'phone', 'school_name')
def get_user_email(self, obj):
return obj.user.email
def get_school_name(self, obj):
return obj.school.school_name
def create(self, validated_data):
return Student.objects.create(**validated_data)
def update(self, instance, validated_data):
instance.user.email = validated_data.get('user_email', instance.user.email)
instance.student_name = validated_data.get('student_name', instance.student_name)
instance.phone = validated_data.get('phone', instance.phone)
instance.school.school_name = validated_data.get('school_name', instance.school.school_name)
instance.save()
return instance
в моей view.py функции обновления
class UserViewSet(ViewSet):
queryset = Student.objects.all()
def update(self, request, pk=None):
student = get_object_or_404(self.queryset, pk=pk)
serializer = StudentSerializer(student, data=request.data, partial=True)
if serializer.is_valid():
serializer.save()
return Response({'status': True})
return Response({'status': False, 'message': serializer.errors})
I я могу использовать представление API для передачи в json и обновлять student_name
и phone
, но как и для двух других, user_email
и school_name
Я не могу его обновить. Я не получаю никаких ошибок при отправке json.
Я понял, что два поля, которые я не могу обновить, - это то, что они OneToOneField/ForeignKey.
Может кто-то, пожалуйста, дайте мне руку, что мне не хватает здесь, или что я могу сделать, чтобы проверить?
Заранее спасибо
'instance..school.school_name', вы просто опечатка в этом StackOverflow или в сценарии ? –
@SancaKembang in stackoverflow: P – Dora