Django REST嵌套对象验证

Django REST嵌套对象验证,django,django-rest-framework,Django,Django Rest Framework,我的数据库: User ----------------------------------- id | name ----------------------------------- 1 | Phuong Vu ----------------------------------- Profile ----------------------------------- user_id | phone_number --------------------------------

我的数据库:

User
-----------------------------------
id  |  name
-----------------------------------
1   |  Phuong Vu
-----------------------------------
Profile
-----------------------------------
user_id  |  phone_number
-----------------------------------
1        |  123456
-----------------------------------
我的模型:

class User(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=100)

class Profile(models.Model):
    user = models.OneToOneField(User, primary_key=True)
    phone_number = models.CharField(max_length=15, unique=True, blank=True)
我的序列化程序:

class ProfileSerializer(serializers.ModelSerializer):
    def validate(self, attrs):
        ##################################
        # I want get current instance here
        ##################################
        print self.instance
        return attrs

    class Meta:
        model = Profile

class UserSerializer(serializers.ModelSerializer):
    profile = ProfileSerializer(many=False)

    class Meta:
        model = User
在我看来,我通过两种方式调用is_valid 2次以进行测试:

profile_data = {
    'phone_number':'123456'
}
user = User.objects.get(pk=1)
profile = Profile.objects.get(user_id=1)
setattr(user, 'profile', profile)
data = {
    'profile': profile_data
}
serializer = UserSerializer(
    user,
    data=data,
    partial=True
)
# This said 'Profile phone number is exist' 
# because ProfileSerialiser.instance is None
serializer.is_valid() 

# This is fine because ProfileSerialiser.instance is not None   
profile_serialiser = ProfileSerialiser(profile, data=profile_data, partial=True)
profile_serializer.is_valid()
创建序列化程序实例后,
UserSerializer.instance
不是
None
,而是子
ProfileSerializer.instance
None


那么我如何解决这个问题呢?(通过
UserSerialiser
创建后,在
ProfileSerializer
中访问
self.instance

出于好奇,您是否可以添加异常?您提到您访问了
ProfileSerializer.instance
,但它不在您的代码中。你在哪里访问它?例如@iulian
ProfileSerializer->def validate(self,attrs):传递
,在这个方法中,我想检查新实例(
self.instance为None
)或来自数据库(
self.instance非None
)@Wtower在数据库
配置文件中(pk=1)。电话号码等于123456
。如果我通过
ProfileSerialiser
进行验证,就可以了。但是当我通过
UserSerialize
验证时,它显示电话号码已经存在(因为通过UserSerializer构建的
ProfileSerializer.instance
我猜是没有的)。请通过编辑来发布问题中的任何附加信息,并在评论中避免这样做。