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.

Reply via email to