python - Django:如何修复 UUID ValueError('格式错误的十六进制 UUID 字符串')?
问题描述
我正在使用 Python 3.8 和 Django 3.0。
模型.py
class CustomeUser(AbstractUser):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
...
class ActivationCode(models.Model):
Code = models.CharField(max_length=30, null=False, unique=True)
ForUser = models.ForeignKey(CustomUser, null=True, blank=True, on_delete=models.CASCADE)
...
代码:
jj = {'app_id': '100',
'color': 'blue',
'os_type': 'MacOS',
'time': '1596397345',
'regKey': 'dJbeetbQ',
'os_version': '10.15.6',
'place_id': '20190228-3',
'version': '2.0.0.8',
'guid': '10614ba9b54f909a715ed518cc39741811369a11',
'randomString': '3808651424'}
regKey = jj["regKey"]
record = ActivationCode.objects.get(Code=regKey)
当 regKey 匹配用户记录时会出现异常。如果 ForUser 字段为空,它将通过。
这里有什么问题?
完整追溯:
Traceback (most recent call last):
File "C:\Users\Ken\anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3331, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-59-b3b355ae1522>", line 1, in <module>
ActivationCode.objects.get(Code=regKey)
File "C:\Users\Ken\anaconda3\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Users\Ken\anaconda3\lib\site-packages\django\db\models\query.py", line 411, in get
num = len(clone)
File "C:\Users\Ken\anaconda3\lib\site-packages\django\db\models\query.py", line 258, in __len__
self._fetch_all()
File "C:\Users\Ken\anaconda3\lib\site-packages\django\db\models\query.py", line 1261, in _fetch_all
self._result_cache = list(self._iterable_class(self))
File "C:\Users\Ken\anaconda3\lib\site-packages\django\db\models\query.py", line 74, in __iter__
for row in compiler.results_iter(results):
File "C:\Users\Ken\anaconda3\lib\site-packages\django\db\models\sql\compiler.py", line 1088, in apply_converters
value = converter(value, expression, connection)
File "C:\Users\Ken\anaconda3\lib\site-packages\django\db\backends\mysql\operations.py", line 270, in convert_uuidfield_value
value = uuid.UUID(value)
File "C:\Users\Ken\anaconda3\lib\uuid.py", line 160, in __init__
raise ValueError('badly formed hexadecimal UUID string')
ValueError: badly formed hexadecimal UUID string
解决方案
此错误的根本原因仅仅是因为您在列中有一个non-UUID
值。ForUser_id
正如你在评论中所说
我有一些记录它们是空的。但没有坏数据。
在我看来,好像null
是什么导致了这个错误。也不建议 aUUIDField
使用null
值,而是使用空字符串值约定。关于使用空和空白字段选项的博客值得一读。
推荐阅读
- javascript - 如果字符串包含来自js中数组的字母,则替换字符串
- react-native - 由 SVG 制作的自定义按钮的可访问性问题
- sql - 如何使用 sql 在 Groovy 中查询地图?
- javascript - 无法循环 GM.xmlHttpRequest
- c++ - 如何修复代码块中的“解析器仍在解析文件”弹出窗口
- c# - 如何以用户选择的单位显示温度
- http - 如何通过 xbee 3g 调制解调器发送/接收 POST 请求,通过串口用 arduino 控制
- asterisk - Asterisk - 使用铃声在会议内拨打电话
- angular - 在 Angular api 服务中安全处理深度嵌套和复杂的 json 对象
- css - CSS根据文本宽度定位文本