我目前使用restful和serializers來創建和更新我的用戶。 不知何故,如果該字段與OneToOneField/ForeignKey有關,我無法更新某些字段。如何使用ViewSet更新OneToOneField/ForeignKey? Django
在我的models.py,我的學生實際上連接到Django的建立用戶模型,其中包括用戶的電子郵件,並連接到具有學校
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)
在串行
的名義辦學模式。 PY我
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})
我我能夠使用API視圖來傳遞json並更新student_name
和phone
,但對於另外兩個user_email
和school_name
我無法更新它。當我提交json時,我沒有收到任何錯誤輸出。
我意識到我無法更新的兩個字段是因爲它們是OneToOneField/ForeignKey。
有人可以給我一隻手我在這裏失蹤或我可以做什麼檢查?
在此先感謝
'instance..school.school_name',你只是在這個計算器或腳本錯字繼續? –
@SancaKembang in stackoverflow:P – Dora