Ich stehe schon seit Stunden am folgenden Code. Auch die wirklich gute Doku hilft mir leider hier nicht weiter. Ich beschäftige mich erst seit Kurzem mit Flask, ich denke ich mache an einem unbekannten Ort ein grundsätzlicher Fehler.
Die fertige App soll den Benutzern beim Erstellen von Meeting-Protokollen helfen. Dazu können die User einer Organisation zugehören und dort eine bestimmte Rolle übernehmen.
In meiner models.py steht Folgendes:
Code: Alles auswählen
from app import db
class Role(db.Model):
user_id = db.Column(db.ForeignKey('user.id'), primary_key=True)
org_id = db.Column(db.ForeignKey('organization.id'), primary_key=True)
role = db.Column(db.String(32))
user = db.relationship('User', back_populates='organizations')
organization = db.relationship('Organization', back_populates='users')
class Organization(db.Model):
id = db.Column(db.Integer, primary_key=True)
org_name = db.Column(db.String(64), index=True, unique=True)
users = db.relationship('Role', back_populates='organization')
def __repr__(self):
return '<Organization {}>'.format(self.org_name)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), index=True, unique=True)
email = db.Column(db.String(120), index=True, unique=True)
password_hash = db.Column(db.String(118))
organizations = db.relationship('Role', back_populates='user')
def __repr__(self):
return '<User {}>'.format(self.username)
Code: Alles auswählen
u1 = User.query.get(1)
o1 = Organization.query.get(1)
u1.organizations.append(u1)
Code: Alles auswählen
Traceback (most recent call last):
File "/usr/lib/python3.9/code.py", line 90, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
File "/home/andreas/PycharmProjects/flaskProject/venv/lib/python3.9/site-packages/sqlalchemy/orm/collections.py", line 1169, in append
item = __set(self, item, _sa_initiator)
File "/home/andreas/PycharmProjects/flaskProject/venv/lib/python3.9/site-packages/sqlalchemy/orm/collections.py", line 1134, in __set
item = executor.fire_append_event(item, _sa_initiator)
File "/home/andreas/PycharmProjects/flaskProject/venv/lib/python3.9/site-packages/sqlalchemy/orm/collections.py", line 753, in fire_append_event
return self.attr.fire_append_event(
File "/home/andreas/PycharmProjects/flaskProject/venv/lib/python3.9/site-packages/sqlalchemy/orm/attributes.py", line 1429, in fire_append_event
value = fn(state, value, initiator or self._append_token)
File "/home/andreas/PycharmProjects/flaskProject/venv/lib/python3.9/site-packages/sqlalchemy/orm/attributes.py", line 1766, in emit_backref_from_collection_append_event
child_impl = child_state.manager[key].impl
KeyError: 'user'
Vielen Dank und Grüsse aus der Schweiz
Andreas