首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >django.core.exceptions.ValidationError:[‘’本科生‘不是有效的UUID。’]

django.core.exceptions.ValidationError:[‘’本科生‘不是有效的UUID。’]
EN

Stack Overflow用户
提问于 2021-08-15 13:25:55
回答 2查看 206关注 0票数 0

我正在尝试添加一种方法,让用户在我的models.py中选择他们是本科生还是研究生。除了我添加了下面的代码之外,一切都可以正常工作:

代码语言:javascript
运行
复制
undergrad_or_grad = models.OneToOneField(
    'StudentStatus', default="Undergraduate", on_delete=models.CASCADE)

基本上,我的想法是,如果用户没有选择一个选项,他们将被默认为本科生。下面是我的完整models.py文件。

代码语言:javascript
运行
复制
from django.db import models
from django.contrib.auth.models import User
import uuid
from django.db.models.signals import post_save, post_delete    

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
    profile_picture = models.ImageField(
        null=True, blank=True, upload_to='profiles/', default='profiles/defaultProfile.jpeg')
    username = models.CharField(
        max_length=200, null=True, blank=True, unique=True)
    name = models.CharField(max_length=200, null=True, blank=True)
    email = models.EmailField(max_length=1000, null=True, blank=True)
    undergrad_or_grad = models.OneToOneField(
        'StudentStatus', default="Undergraduate", on_delete=models.CASCADE)
    id = models.UUIDField(default=uuid.uuid4, unique=True,
                          primary_key=True, editable=False)

    def __str__(self):
        return str(self.username)


class StudentStatus(models.Model):
    STUDENT_TYPES = (
        ('undergrad', 'Undergraduate'),
        ('grad', 'Graduate'),
    )
    title = models.CharField(max_length=200, null=True,
                             blank=True, choices=STUDENT_TYPES)
    date_created = models.DateTimeField(auto_now_add=True)
    id = models.UUIDField(default=uuid.uuid4, unique=True,
                          primary_key=True, editable=False)

    def __str__(self):
        return str(self.title)

下面是我先运行python manage.py makemigrations,然后运行python manage.py migrate之后的完整错误。我试着去掉default="Undergraduate",但是错误仍然存在。

代码语言:javascript
运行
复制
(env) PS D:\Django Projects\StudentArchive> python manage.py migrate       
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, users
Running migrations:
  Applying users.0010_auto_20210815_0758...Traceback (most recent call last):
  File "D:\Django Projects\StudentArchive\env\lib\site-packages\django\db\models\fields\__init__.py", line 2434, in to_python
    return uuid.UUID(**{input_form: value})
  File "c:\users\thatr\appdata\local\programs\python\python39\lib\uuid.py", line 177, in __init__
    raise ValueError('badly formed hexadecimal UUID string')
ValueError: badly formed hexadecimal UUID string

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:\Django Projects\StudentArchive\manage.py", line 22, in <module>
    main()
  File "D:\Django Projects\StudentArchive\manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "D:\Django Projects\StudentArchive\env\lib\site-packages\django\core\management\__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "D:\Django Projects\StudentArchive\env\lib\site-packages\django\core\management\__init__.py", line 413, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "D:\Django Projects\StudentArchive\env\lib\site-packages\django\core\management\base.py", line 354, in run_from_argv
    self.execute(*args, **cmd_options)
  File "D:\Django Projects\StudentArchive\env\lib\site-packages\django\core\management\base.py", line 398, in execute
    output = self.handle(*args, **options)
  File "D:\Django Projects\StudentArchive\env\lib\site-packages\django\core\management\base.py", line 89, in wrapped
    res = handle_func(*args, **kwargs)
  File "D:\Django Projects\StudentArchive\env\lib\site-packages\django\core\management\commands\migrate.py", line 244, in handle
    post_migrate_state = executor.migrate(
  File "D:\Django Projects\StudentArchive\env\lib\site-packages\django\db\migrations\executor.py", line 117, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
  File "D:\Django Projects\StudentArchive\env\lib\site-packages\django\db\migrations\executor.py", line 147, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
  File "D:\Django Projects\StudentArchive\env\lib\site-packages\django\db\migrations\executor.py", line 227, in apply_migration
    state = migration.apply(state, schema_editor)
  File "D:\Django Projects\StudentArchive\env\lib\site-packages\django\db\migrations\migration.py", line 126, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
  File "D:\Django Projects\StudentArchive\env\lib\site-packages\django\db\migrations\operations\fields.py", line 104, in database_forwards
    schema_editor.add_field(
  File "D:\Django Projects\StudentArchive\env\lib\site-packages\django\db\backends\sqlite3\schema.py", line 330, in add_field
    self._remake_table(model, create_field=field)
  File "D:\Django Projects\StudentArchive\env\lib\site-packages\django\db\backends\sqlite3\schema.py", line 191, in _remake_table
    self.effective_default(create_field)
  File "D:\Django Projects\StudentArchive\env\lib\site-packages\django\db\backends\base\schema.py", line 324, in effective_default
    return field.get_db_prep_save(self._effective_default(field), self.connection)
  File "D:\Django Projects\StudentArchive\env\lib\site-packages\django\db\models\fields\related.py", line 971, in get_db_prep_save
    return self.target_field.get_db_prep_save(value, connection=connection)
  File "D:\Django Projects\StudentArchive\env\lib\site-packages\django\db\models\fields\__init__.py", line 842, in get_db_prep_save
    return self.get_db_prep_value(value, connection=connection, prepared=False)
  File "D:\Django Projects\StudentArchive\env\lib\site-packages\django\db\models\fields\__init__.py", line 2424, in get_db_prep_value
    value = self.to_python(value)
  File "D:\Django Projects\StudentArchive\env\lib\site-packages\django\db\models\fields\__init__.py", line 2436, in to_python
    raise exceptions.ValidationError(
django.core.exceptions.ValidationError: ['“Undergraduate” is not a valid UUID.']

如何修复此错误?提前谢谢。

EN

Stack Overflow用户

发布于 2021-08-15 13:35:45

为什么要将StudentStatus分离为独立的模型?它应该在Profile中作为您在STUDENT_TYPES中设置的CharField

回答你的问题。如果不更改数据库模型,则无法解决此问题。构建OneToOne关系您可以创建与它的UUID的primary_key的关系。并且短语“UUID”不是有效的UUID。

使您的数据库清晰简单,并将学生的毕业类型添加到Profile

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68791963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档