On Sun, 2009-05-03 at 09:43 -0400, Michael Bayer wrote: > > > On May 2, 2009, at 8:16 PM, Iain Duncan wrote: > > > > > On Sat, 2009-05-02 at 09:41 -0400, Michael Bayer wrote: > >> > >> you'd set cascade="all, delete-orphan" on the Purchase.registration > >> side (in this case its your backref). > > > > Thanks Mike. So what is the recommended way of creating the attached > > item though, or is it supposed to happen automatically from the > > mapper? > > > you can say p.registration = r, or Purchase(registration=r), the > cascade option would enforce the constraint at flush time.
Ah, so that is the reverse of what I was thinking. You see, the form's job is to create a registration. So is it equally fine to go the other way? r = Registration( purchase=Purchase() ) or even better ( i hope? ) class Registration(object): def __init__(self, **kwargs): self.purchase = Purchase() for k,v in kwargs.items(): setattr(self,k,v) ? thanks Mike Iain > > > > > > > > Iain > >> > >> > >> On May 2, 2009, at 1:42 AM, Iain Duncan wrote: > >> > >>> > >>> Hi all, I have a mapper that looks like this: > >>> > >>> mapper( Registration, registration_table, properties={ > >>> 'purchase': relation(Purchase, > >>> backref=backref('registration', uselist=False), > >>> cascade='all' ), > >>> }) > >>> > >>> My registration table has a foreign key to purchases, and I want to > >>> make > >>> sure no registration exists without an associated purchase. I have > >>> the > >>> referrence backwards like a many-to-one because purchases may also > >>> be > >>> referred to in other tables ( like memberships ). Maybe this is > >>> not a > >>> good idea, not sure. Feel free to tell me. Should this perhaps be > >>> handled in a separate associating table with primary key with one > >>> column > >>> primary key constraints on it? > >>> > >>> But, my immediate problem is that I don't know what the correct > >>> way to > >>> make sure I create a purchase on creation of a registration. Should > >>> I be > >>> creating a purchase in the registration constructor? Should I be > >>> doing > >>> something like: > >>> > >>> r = Registration( purchase=Purchase() ) > >>> > >>> Or should it work magically if I set up my cascade options > >>> differently? > >>> > >>> Thanks > >>> Iain > >>> > >>> > >>> > >>>> > >> > >> > >>> > > > > > > > > > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---