【发布时间】:2017-06-15 04:54:36
【问题描述】:
我目前正在使用 restful 和序列化程序来创建和更新我的用户。 如果字段与 OneToOneField / ForeignKey 有关,我无法更新某些字段。
在我的 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)
在 serializer.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
在我看来.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,你只是在这个 stackoverflow 或你的脚本中打错了吗? -
@SancaKembang 在 stackoverflow 中:P
标签: python json django serialization model