我正在尝试添加一种方法,让用户在我的models.py中选择他们是本科生还是研究生。除了我添加了下面的代码之外,一切都可以正常工作:
undergrad_or_grad = models.OneToOneField(
'StudentStatus', default="Undergraduate", on_delete=models.CASCADE)
基本上,我的想法是,如果用户没有选择一个选项,他们将被默认为本科生。下面是我的完整models.py文件。
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"
,但是错误仍然存在。
(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.']
如何修复此错误?提前谢谢。
发布于 2021-08-15 13:35:45
为什么要将StudentStatus
分离为独立的模型?它应该在Profile
中作为您在STUDENT_TYPES
中设置的CharField
回答你的问题。如果不更改数据库模型,则无法解决此问题。构建OneToOne关系您可以创建与它的UUID的primary_key
的关系。并且短语“UUID”不是有效的UUID。
使您的数据库清晰简单,并将学生的毕业类型添加到Profile
中
https://stackoverflow.com/questions/68791963
复制相似问题