你可以
phone_number
不需要,然后手动进行检查。你得到了错误,因为drf验证了
电话号码
在你之前。因此,基本上,解决方案可以是以下(仅限于serialiser代码):
class OTPSerializer(serializers.ModelSerializer):
code = serializers.CharField(max_length=None, required=False)
class Meta:
model = OTP
fields = ('id', 'code', 'phone_number')
read_only_fields=('id', 'code')
extra_kwargs = {'phone_number': {'required': False}}
@transaction.atomic
def create(self, validated_data):
phone_number = validated_data.pop("phone_number")
otp, created = OTP.objects.update_or_create(
phone_number=phone_number, defaults={"code": generate_otp()})
return otp