Can't create table ctfd
.discorduser
(errno: 150 "Foreign key constraint is incorrectly formed")
CREATE TABLE discorduser (
id BIGINT NOT NULL AUTO_INCREMENT,
username VARCHAR(128),
discriminator INTEGER,
avatar_hash VARCHAR(256),
mfa_enabled BOOL,
verified BOOL,
email VARCHAR(256),
PRIMARY KEY (id),
UNIQUE (id),
UNIQUE (id),
FOREIGN KEY(username) REFERENCES users (name) ON DELETE CASCADE,
CHECK (mfa_enabled IN (0, 1)),
CHECK (verified IN (0, 1))
)
The models are defined like this:
class Users(db.Model):
__tablename__ = "users"
__table_args__ = (db.UniqueConstraint("id", "oauth_id"), {})
# Core attributes
id = db.Column(db.Integer, primary_key=True)
oauth_id = db.Column(db.Integer, unique=True)
# User names are not constrained to be unique to allow for official/unofficial teams.
name = db.Column(db.String(128))
password = db.Column(db.String(128))
email = db.Column(db.String(128), unique=True)
type = db.Column(db.String(80))
secret = db.Column(db.String(128))
# Supplementary attributes
website = db.Column(db.String(128))
affiliation = db.Column(db.String(128))
country = db.Column(db.String(32))
bracket = db.Column(db.String(32))
hidden = db.Column(db.Boolean, default=False)
banned = db.Column(db.Boolean, default=False)
verified = db.Column(db.Boolean, default=False)
# Relationship for Teams
team_id = db.Column(db.Integer, db.ForeignKey("teams.id"))
field_entries = db.relationship(
"UserFieldEntries", foreign_keys="UserFieldEntries.user_id", lazy="joined"
)
created = db.Column(db.DateTime, default=datetime.datetime.utcnow)
__mapper_args__ = {"polymorphic_identity": "user", "polymorphic_on": type}
def __init__(self, **kwargs):
super(Users, self).__init__(**kwargs)
class DiscordUser(db.Model):
__tablename__ = "discorduser"
__table_args__ = (db.UniqueConstraint("id"), {})
# Core variables
id = db.Column(db.BigInteger, primary_key=True, unique=True) # Discord ID, int64
# Discord Username 2-32 characters
username = db.Column(db.String(128), db.ForeignKey("users.name", ondelete="CASCADE"))
What could be causing this? The username type is the same for both, and I am under the impression that Foreign Keys do not need to be constrained.