> -----Original Message-----
> From: sqlalchemy@googlegroups.com [mailto:sqlalchemy@googlegroups.com]
> On Behalf Of jln
> Sent: 15 March 2011 16:37
> To: sqlalchemy
> Subject: [sqlalchemy] In-memory object duplication
> 

[SNIP]

> statuses = OneToMany('DocumentStatus', inverse='doc', cascade='all,
> delete-orphan', order_by=['timestamp'])
> 
> So, when I create a new DocumentStatus object, Document.statuses
> lists
> two of them, but not actually persisted to the database. In other
> words, leaving my Python shell, and starting the model from scratch,
> there actually is only one child object (corroborated by squizzing
> the
> database directly). Here's my DocumentStatus.create() class method:
> 
>     @classmethod
>     @logged_in
>     @log_input
>     def create(cls, doc, status, person=None, date=None):
>         person=validate_person(person)
>         if person:
>             status = DocumentStatus(doc=doc, status=status,
> person=person, date=resolve_datetime(date))
>             if status:
>                 doc.statuses.append(status)
>                 doc.flush()
>                 out = 'Document status created'
>                 success = True
>             else:
>                 out = 'Document status not created'
>                 success = False
>         else:
>             out = 'Person does not exist'
>             success = False
>         log_output(out)
>         return success
> 
> I simply don't know why this is happening or, as I said, how to
> search, intelligently, for an answer.

I don't know Elixir, but I assume that the "inverse='doc'" line in the
relationship sets up an SQLAlchemy backref. If so, then setting
status.doc (presumably done in DocumentStatus.__init__) will
automatically populate doc.statuses at the same time.

So when you do doc.statuses.append(status) a bit later on, you're adding
it to the list a second time.

Hope that helps,

Simon

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to