Simon,
I don't think I understood correctly what you meant. I changed this code:
class Color(db.Model):
...
def __init__(self, medium, name, *, pure=True, recipe=[]):
self.medium = medium.upper()
self.name = name
self.pure = False if len(recipe) > 1 else True
if self.pure:
recipe = [(self, self, 1)]
* db.session.add(self)*
* db.session.flush()*
for entry in recipe:
self.recipe.append(Recipe(entry))
class Recipe(db.Model):
base_id = db.Column(db.Integer, primary_key=True, autoincrement=False)
ingredient_id = db.Column(db.Integer, primary_key=True,
autoincrement=False)
ingredient_name = db.Column(db.String, db.ForeignKey('color.name'))
quantity = db.Column(db.Integer, nullable=False, default=1)
* base = db.relationship(Color,*
* primaryjoin='Color.id==Recipe.base_id',*
* uselist=True,*
* join_depth=1,*
* lazy='joined'*
* )*
* ingredient = db.relationship(Color,*
* primaryjoin='Color.id==Recipe.ingredient_id',*
* uselist=True,*
* join_depth=1,*
* lazy='joined'*
* )*
__table_args__ = (
db.ForeignKeyConstraint(
['base_id', 'ingredient_id'],
['color.id', 'color.id'],
onupdate = 'CASCADE',
ondelete = 'CASCADE'
),
)
def __init__(self, ingredient_tuple):
super().__init__()
* self.base.append(ingredient_tuple[0].id)*
* self.ingredient.append(ingredient_tuple[1].id)*
self.ingredient_name = ingredient_tuple[1].name
self.quantity = ingredient_tuple[2]
Now I get this error upon trying to create *blurg = Color('oa', 'blurg')*
*AttributeError: 'int' object has no attribute '_sa_instance_state'*
Full error stack:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 4, in __init__
File
"C:\Users\riggss2\Dropbox\programming\Playground\colors\wkenv\lib\site-pa
ckages\sqlalchemy\orm\state.py", line 441, in _initialize_instance
manager.dispatch.init_failure(self, args, kwargs)
File
"C:\Users\riggss2\Dropbox\programming\Playground\colors\wkenv\lib\site-pa
ckages\sqlalchemy\util\langhelpers.py", line 68, in __exit__
compat.reraise(exc_type, exc_value, exc_tb)
File
"C:\Users\riggss2\Dropbox\programming\Playground\colors\wkenv\lib\site-pa
ckages\sqlalchemy\util\compat.py", line 153, in reraise
raise value
File
"C:\Users\riggss2\Dropbox\programming\Playground\colors\wkenv\lib\site-pa
ckages\sqlalchemy\orm\state.py", line 438, in _initialize_instance
return manager.original_init(*mixed[1:], **kwargs)
File "C:\Users\riggss2\Dropbox\programming\Playground\colors\colors.py",
line
36, in __init__
self.recipe.append(Recipe(entry))
File
"C:\Users\riggss2\Dropbox\programming\Playground\colors\wkenv\lib\site-pa
ckages\sqlalchemy\orm\collections.py", line 1113, in append
item = __set(self, item, _sa_initiator)
File
"C:\Users\riggss2\Dropbox\programming\Playground\colors\wkenv\lib\site-pa
ckages\sqlalchemy\orm\collections.py", line 1078, in __set
item = executor.fire_append_event(item, _sa_initiator)
File
"C:\Users\riggss2\Dropbox\programming\Playground\colors\wkenv\lib\site-pa
ckages\sqlalchemy\orm\collections.py", line 714, in fire_append_event
return self.attr.fire_append_event(
File
"C:\Users\riggss2\Dropbox\programming\Playground\colors\wkenv\lib\site-pa
ckages\sqlalchemy\orm\attributes.py", line 1162, in fire_append_event
value = fn(state, value, initiator or self._append_token)
File
"C:\Users\riggss2\Dropbox\programming\Playground\colors\wkenv\lib\site-pa
ckages\sqlalchemy\orm\unitofwork.py", line 51, in append
sess._save_or_update_state(item_state)
File
"C:\Users\riggss2\Dropbox\programming\Playground\colors\wkenv\lib\site-pa
ckages\sqlalchemy\orm\session.py", line 1975, in _save_or_update_state
for o, m, st_, dct_ in mapper.cascade_iterator(
File
"C:\Users\riggss2\Dropbox\programming\Playground\colors\wkenv\lib\site-pa
ckages\sqlalchemy\orm\mapper.py", line 3051, in cascade_iterator
queue = deque(
File
"C:\Users\riggss2\Dropbox\programming\Playground\colors\wkenv\lib\site-pa
ckages\sqlalchemy\orm\relationships.py", line 1768, in cascade_iterator
tuples = state.manager[self.key].impl.get_all_pending(state, dict_)
File
"C:\Users\riggss2\Dropbox\programming\Playground\colors\wkenv\lib\site-pa
ckages\sqlalchemy\orm\attributes.py", line 1132, in get_all_pending
current_states = [
File
"C:\Users\riggss2\Dropbox\programming\Playground\colors\wkenv\lib\site-pa
ckages\sqlalchemy\orm\attributes.py", line 1133, in <listcomp>
((c is not None) and instance_state(c) or None, c)
AttributeError: 'int' object has no attribute '_sa_instance_state'
>
>
--
SQLAlchemy -
The Python SQL Toolkit and Object Relational Mapper
http://www.sqlalchemy.org/
To post example code, please provide an MCVE: Minimal, Complete, and Verifiable
Example. See http://stackoverflow.com/help/mcve for a full description.
---
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/sqlalchemy/7fccfb50-75cf-4e64-9c62-9c9b7459a61a%40googlegroups.com.