我想做什么?
Django不支持在mysql数据库中设置枚举数据类型。使用下面的代码,我尝试设置枚举数据类型
错误详细信息
_mysql.connection.query(self, query) django.db.utils.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'NOT NULL,
created_at
datetime(6) NOT NULL,user_id
bigint NOT NULL)' at line 1")
我遗漏了什么吗?
包含所有选项的枚举类
class enumTokenTypes(models.TextChoices):
Registration = "Registration"
ForgotPassword = "Forgot Password"
模型中的用户令牌类
class tblusertokens(models.Model):
token_id = AutoField(primary_key=True)
token_type = EnumField(max_length=20, choices=enumTokenTypes.choices)
created_at = DateTimeField(auto_now_add=True, blank=True)
user = ForeignKey(tblusers, on_delete = models.CASCADE)
迁移中的用户令牌创建模型
class EnumField(CharField):
def db_type(self, connection):
return "enum"
migrations.CreateModel(
name='tblusertokens',
fields=[
('token_id', models.AutoField(primary_key=True, serialize=False)),
('token_type', clientauth.models.EnumField(choices=[('Registration', 'Registration'), ('Forgot Password', 'Forgotpassword')], max_length=20)),
('created_at', models.DateTimeField(auto_now_add=True)),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='clientauth.tblusers')),
],
)
悬赏问题
为函数设置2个参数,以传递逗号分隔的值和默认值
数据类型应该是
enum('Registration', 'Forgot Password')
,而不仅仅是enum
参考:https://dev.mysql.com/doc/refman/8.0/en/enum.html
数据库默认值
虽然上面的MySQL 8.0文档中没有明确提到,但您也可以指定一个DB默认值
用法:
关于
deconstruct()
方法从https://docs.djangoproject.com/en/3.2/howto/custom-model-fields/#field-deconstruction:
对悬赏问题的回应
用于设置默认值:在EnumField中添加默认参数。在下面的示例中,我将enumTokenTypes注册设置为其默认值。通过示例查看Django documentation的
enum
实现您可以打印出该迁移的sql以查看具体的错误,但是定义
db_type
返回"enum"
肯定不是正确的方法由于某种原因,
Enumeration types
上的文档中推荐的语法对您不起作用吗相关问题 更多 >
编程相关推荐