Получение неверного UUID при миграции в Django - PullRequest
0 голосов
/ 03 мая 2020

Я добавил поле с именем Transactions_id в мой models.py Я хочу, чтобы это поле использовалось для отслеживания каждой транзакции на моей DuesLevy модели, которую я импортировал uuid, но каждый раз, когда я выполняю миграцию, я получаю эта ошибка. Как предотвратить возникновение этой ошибки при каждой миграции (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."]

Об этой проблеме сообщалось Здесь , но решение пока не найдено. Я использую 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})

1 Ответ

0 голосов
/ 03 мая 2020

Вам необходимо передать функцию в аргумент default models.UUIDField. uuid.uuid4 - это функция, которая при вызове возвращает новый объект uuid. Не передавайте строку или целое число в качестве аргумента по умолчанию.

Если вы хотите покопаться в исходном коде, вот как работает внутреннее устройство Field. https://github.com/django/django/blob/master/django/db/models/fields/ 1010 * INIT * .py # L827

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