9

我有以下模型:

class UserProfile(models.Model):
    mobileNumber = models.BigIntegerField(primary_key=True)
    authKey = models.CharField(max_length=300,null=False,blank=False)
    creationDateTime = models.DateTimeField(auto_now_add=True)
    lastUpdateDateTime = models.DateTimeField(auto_now=True)

序列化器:

class UserProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserProfile
        fields = ('mobileNumber','authKey')

如果 userprofile 模型已经有一个 mobilenumber XX44 并且如果我尝试使用带有 json {'mobileNumber': XX44, 'authKey': u'ggsdsagldaslhdkjashdjkashdjkahsdkjah'} 的 UserProfileSerializer 进行序列化,我会收到以下错误:

{'mobileNumber': [u'User profile with this MobileNumber already exists.']}

因为正在为序列化程序字段运行模型验证。

如何停止执行 mobileNumber 的模型字段验证。我在序列化程序中尝试了 validate 和 validate_mobileNumber 方法,但它们仍在执行模型验证。

4

3 回答 3

2

删除对表移动号码的唯一约束,因此 django 序列化程序将根据该约束进行验证。

或者,

   serializer=UserProfileSerializer(data=request.DATA,partial=True)
于 2014-05-14T06:12:02.207 回答
0

我了解您不会保存序列化程序数据。因此,您可以将其设置mobileNumberread_only.UserProfileSerializer

检查序列化器字段文档以获取更多信息: http: //www.django-rest-framework.org/api-guide/fields/#core-arguments

于 2016-01-05T21:30:53.240 回答
0

通过覆盖序列化程序中的模型字段,并指定required=False, allow_blank=True, allow_null=True

class SomeModel(models.Model):
   some_model_field_which_is_required = models.ForeignKey(...)
   some_other_required_field = models.CharField(...)

class SomeModelSerializer(serializers.ModelSerializer):
    some_model_field_which_is_required = SomeNestedSerializer(
        many=True, required=False, allow_blank=True
    )
    some_other_required_field = serializers.CharField(required=False, allow_blank=True)

   def validate(self, *args, **kwargs):
       print('should get here')

   def validate_some_other_required_field(self, *args, **kwargs):
       print('should also get here')

    class Meta:
        model = SomeModel

于 2019-10-01T23:03:03.580 回答