Я настраиваю модели базы данных, и мне нужно установить отношения между ними.Однако ребенок всегда создается первым, и возникают проблемы, поскольку внешний ключ для него еще не существует.
У меня есть 3 таблицы: пользователь, команда и игроки.Пользователь может иметь много команд, и одна команда может иметь много игроков.Это все сработало бы, если бы я сначала создал User, затем команду для него и затем добавил в него игроков.Потому что все это отношения один-ко-многим.
Однако у меня всегда будет команда и ее игроки.Только когда люди действительно регистрируются на моей веб-странице и вводят идентификатор своей команды. Пользователь должен быть создан и связан с командой, которая имеет этот идентификатор.
Это мой код на данный момент, но он не работает по указанным причинам..
class User(UserMixin, db.Model):
__tablename__ = 'user'
user_id = db.Column(db.Integer,primary_key=True)
username = db.Column(db.String(64), nullable=False)
email = db.Column(db.String(64), nullable=False)
password_hash = db.Column(db.String(128), nullable = False)
token = db.Column(db.String(64), unique=True, nullable = True)
secret_token = db.Column(db.String(64),unique=True, nullable = True)
teams = db.relationship("Team", backref="user", lazy=True)
def add_team(self,team_id,team_name,user_name,youthteam_id,user_id):
t = Team(team_id = team_id,team_name = team_name,user_name = user_name,youthteam_id = youthteam_id,user_id = self.user_id)
db.session.add(t)
db.session.commit()
def __repr__(self):
return '<User {}>'.format(self.username)
def set_password(self, password):
self.password_hash = generate_password_hash(password)
def check_password(self, password):
return check_password_hash(self.password_hash, password)
class Team(db.Model):
__tablename__ = "team"
team_id = db.Column(db.Integer, primary_key=True)
team_name = db.Column(db.String, nullable=False)
user_name = db.Column(db.String, nullable=False)
youthteam_id = db.Column(db.Integer, nullable=False)
players = db.relationship("Player", backref="team", lazy=True)
user_id = db.Column(db.Integer, db.ForeignKey("user.user_id"), nullable=False)
def add_player(self,youthplayer_id, youth_name, youth_surname, age, promoted_in, speciality, last_rating,last_pos):
p = Player(youthplayer_id = youthplayer_id,youth_name = youth_name,youth_surname = youth_surname,age = age,promoted_in = promoted_in,speciality = speciality,last_rating= last_rating,last_pos = last_pos,team_id = self.team_id)
db.session.add(p)
db.session.commit()
class Player(db.Model):
__tablename__ = "player"
youthplayer_id = db.Column(db.Integer, primary_key=True)
youth_name = db.Column(db.String, nullable=False)
youth_surname = db.Column(db.String, nullable=False)
age = db.Column(db.Numeric, nullable=False)
promoted_in = db.Column(db.Integer, nullable=False)
speciality = db.Column(db.String, nullable=False)
last_rating = db.Column(db.Numeric, nullable=False)
last_pos = db.Column(db.String, nullable=False)
team_id = db.Column(db.Integer, db.ForeignKey("team.team_id"), nullable=False)
Итак, чего бы я хотел добиться, так это того, чтобы в базе данных была команда Alpha, и к ней подключены player1 и player2.Когда фактический человек регистрируется на моей странице, он вводит свою электронную почту, имя пользователя и пароль.Через ouath я получаю его user_id с другой страницы.Затем я включаю пользователя в свою таблицу пользователей и через этот user_id он соединяется со своей командой.