当我在Django中迁移时,得到的UUID不是有效的



我在我的模型中添加了一个名为transaction_id的字段。我希望该字段用于跟踪我的DuesLevy模型上的每个事务。为此,我导入了uuid,但每次迁移时都会出现此错误。如何防止每次迁移时发生此错误(python manage.py migrate(

"C:UsersBenedictMiniconda3envsdjango3libsite-packagesdjangodbmodelsfields__init__.py", line 2344, in to_python
params={'value': value},
django.core.exceptions.ValidationError: ["'13615773708697' is not a valid UUID."]

这里已经报道了这个问题,但似乎还没有解决方案。我使用Django 3+MySQL
模型.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})

您需要将一个函数传递给models.UUIDFielddefault参数。uuid.uuid4是一个函数,当被调用时,它会返回一个新的uuid对象。不要将字符串或整数作为默认参数传递。

如果您想深入研究源代码,以下是Field的内部工作原理。https://github.com/django/django/blob/master/django/db/models/fields/init.py#L827

最新更新