Django: Как исправить ошибку UUID ValueError ('неверно сформированная шестнадцатеричная строка UUID')? - PullRequest
0 голосов
/ 02 августа 2020

Я использую Python 3.8 и Django 3.0.

Models.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 равно NULL, оно будет от go до

В чем проблема?

Полная обратная трассировка:

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

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

Я понял, что не так.

Проблема была вызвана некоторыми пользовательскими записями, которые я обновил на сервере MySQL с помощью UUID (). но UUID () в MYSQL составляет 36 байтов, а поле UUID в Django - 32 байта.

теперь я снова обновил идентификатор с id = UUID (). Заменить ('-', '' ), то проблема устранена.

0 голосов
/ 03 августа 2020

Причина root этой ошибки просто возникает из-за того, что у вас есть значение non-UUID в столбце ForUser_id .

Как вы указали в комментариях

У меня есть записи, что они пустые. Но никаких плохих данных.

Мне кажется, что null является причиной этой ошибки. Также не рекомендуется для UUIDField использовать значения null, вместо этого используйте соглашения о пустых строковых значениях. Блог на Использование опций пустых и пустых полей заслуживает внимания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...