【发布时间】:2019-06-07 08:06:09
【问题描述】:
代码:
类 OTP(AppModel): phone_regex = RegexValidator(regex=r'^[6789]\d{9}$', message="电话号码无效。") phone_number = models.CharField(validators=[phone_regex], max_length=10, unique=True) 代码 = models.CharField(max_length=255) def __str__(self): 返回 str(self.phone_number) + ": "+str(self.code) 类 OTPSerializer(serializers.ModelSerializer): code = serializers.CharField(max_length=None, required=False) 元类: 型号 = OTP 字段 = ('id', 'code', 'phone_number') read_only_fields=('id', 'code') @transaction.atomic 定义创建(自我,验证数据): phone_number = 已验证数据.pop("phone_number") otp, 创建 = OTP.objects.update_or_create( phone_number=phone_number,默认值={"code": generate_otp()}) 返回 otp我正在尝试在django-rest-framework 的ModelSerializer 的create 方法中执行update_or_create。
但是,模型OTP 中的字段phone_number 必须是unique。因此unique=True。
我能够发布phone_number 并创建对象。但是,再次发布相同的phone_number 会引发错误otp with this phone number already exists,而不是在它已经存在时更新它,因为我已经覆盖了create 方法。请帮忙!
【问题讨论】:
标签: python django django-models django-rest-framework