我有以下型号:
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模型已经有一个移动号码XX44,并且我尝试使用json {' mobileNumber':XX44,' authKey':u' ggsdsagldaslhdkjashdjkashdjkahsdkjah'使用UserProfileSerializer进行序列化。我收到以下错误:
{'mobileNumber': [u'User profile with this MobileNumber already exists.']}
因为正在为序列化程序字段运行模型验证。
如何停止执行mobileNumber的模型字段验证。我在序列化程序中尝试了validate和validate_mobileNumber方法,但它们仍在执行模型验证。
答案 0 :(得分:2)
删除对表的移动号码的唯一约束,因此django序列化器将根据该验证进行验证。
或 可替代地,
serializer=UserProfileSerializer(data=request.DATA,partial=True)
答案 1 :(得分:0)
我知道您不会保存序列化数据。因此,您可以将packageName in Universal := "dist"
设置为mobileNumber
上的read_only
字段。
检查序列化程序字段文档以获取更多信息:http://www.django-rest-framework.org/api-guide/fields/#core-arguments
答案 2 :(得分:0)
通过覆盖序列化程序中的model字段,并指定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