【发布时间】:2020-08-17 15:48:38
【问题描述】:
我在 models.py 中添加了一个名为 transaction_id 的字段得到这个错误。 如何防止每次迁移时发生此错误(python manage.py migrate)
"C:\Users\Benedict\Miniconda3\envs\django3\lib\site-packages\django\db\models\fields\__init__.py", line 2344, in to_python
params={'value': value},
django.core.exceptions.ValidationError: ["'13615773708697' is not a valid UUID."]
此问题已报告Here,但似乎还没有解决方案。
我正在使用 Django 3 + MySQL
models.py
trans_id = uuid.uuid4()
trans_str = trans_id.int
pass_trans = str(trans_str)[:12]
class DuesLevy(models.Model):
class_of_dues = models.CharField(max_length=30, default=options.CHOOSE, choices=options.CLASS_OF_DUES, blank=True)
payment_circle = models.CharField(max_length=30, default=options.CHOOSE, choices=options.PAYMENT_CIRCLE)
payment_option = models.CharField(max_length=30, default=options.CHOOSE, choices=options.PAYMENT_OPTION)
amount = models.DecimalField(max_digits=8, decimal_places=2)
transaction_id = models.UUIDField(max_length=100, unique=True, null=True, blank=True, editable=False, default=pass_trans)
payment_channel = models.CharField(max_length=30, default=options.CHOOSE, choices=options.PAYMENT_CHANNEL_TYPE)
payment_date = models.DateField()
date_recorded = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
description = models.TextField(blank=True, null=True)
def __str__(self):
return self.amount
def get_absolute_url(self):
return reverse('backend:detail_dues', kwargs={'pk': self.id})
【问题讨论】:
-
您预计会发生什么?您将 12 个字符 int 作为 uuid 传递,这不是有效的 uuid。
-
我想把字符缩短到12个,不行吗,让我用完整的字符试试
-
只要通过
default=uuid.uuid4,你就可以安全又好走(而不是default=pass_trans)。 -
我在传递 default=uuid.uuid4 后仍然遇到同样的错误,我不能将值缩短到我想要的长度吗?
-
不,那不是 uuid。