Hi,
Thanks for the suggestions, they make sense to me. I think I
implemented them correctly but still getting the same IntegrityError
from the id being Null:
Added project = Project() at the top.
Here is the updated code:
if kw['project_id'] != u'0':
ai.project_id = int(kw['project_id'])
else:
project.projectname = kw['project_name']
ai.projects = project
log.debug(project.projectname)
DBSession.flush()
log.debug(ai.projects.projectname)
log.debug(ai.projects.id)
....
DBSession.save(ai)
The debug output shows that project.projectname and
ai.projects.projectname are being set correctly but
log.debug(ai.projects.id) still gives me a Null after the flush?
I guess I need my hand held a bit more...
Thanks,
Eric
On Oct 20, 12:32 am, Diez Roggisch <[EMAIL PROTECTED]> wrote:
> You need to flush the Session after you added an object to provoke the
> creation of the id, otherwise it will only created after the commit of the
> transaction. But at that time, your controller and template code has been
> run already, and the id was None. This is one of the annoying aspects of SA.
>
> And when you use an object to form a relationship, you should also use the
> object itself, not the id - for the same reason. Like this:
>
> parent = Parent()
>
> child = Child()
> child.parent =parent
> #child.parent_id = parent.id # Won't work, as id will be none!
>
> Diez
> -----Ursprüngliche Nachricht-----
> Von: "Eric" <[EMAIL PROTECTED]>
> Gesendet: 20.10.08 07:27:31An: TurboGears <[email protected]>
> Betreff: [TurboGears] TG2/SQLAlchemy cascading add problem
>
> Hi all,
> Using TG 1.9.7a4 on WinXP/2.5.2 and having trouble getting a cascading
> database add to work; getting a null value which causes an
> "IntegrityError: (IntegrityError) actionitems.project_id may not be
> NULL...". I have a table with a relation between Action items and
> Projects. On my form, I have a TextField to allow entry of a new
> project name or a SingleSelectField to pick an existing Project from a
> list that I pull from the Projects table. If a new project name is
> entered, I want to add it to the Project table and save the id in the
> Action item table, otherwise the id of the selected Project is saved
> with the Action item...
>
> My model classes are:
>
> class ActionItem(DeclarativeBase):
> __tablename__ = 'actionitems'
>
> id = Column(Integer, primary_key = True)
> description = Column(String, nullable = False)
> priority = Column(Integer, nullable = False)
> assigned_to_id = Column(Integer, ForeignKey('persons.id'),
> nullable = False)
> assigned_by_id = Column(Integer, ForeignKey('persons.id'),
> nullable = False)
> project_id = Column(Integer, ForeignKey('projects.id'), nullable =
> False)
> date_added = Column(Date, nullable = False)
> date_due = Column(Date, nullable = False)
>
> project = relation('Project', backref = backref('projects',
> order_by = 'id'))
> assigned_to = relation('Person', primaryjoin =
> 'ActionItem.assigned_to_id == Person.id', backref =
> backref('assigned_to', order_by = 'id'))
> assigned_by = relation('Person', primaryjoin =
> 'ActionItem.assigned_by_id == Person.id', backref =
> backref('assigned_by', order_by = 'id'))
>
> class Project(DeclarativeBase):
> __tablename__ = 'projects'
>
> id = Column(Integer, primary_key = True)
> projectname = Column(String, nullable = False, unique = True)
>
> Try to save it here:
>
> def create_ai(self, **kw):
> ai = ActionItem()
> ai.description = kw['description']
> ai.priority = kw['priority']
>
> #temp assignments to prevent SQLAlchemy submit error
> ai.assigned_to_id = 1
> ai.assigned_by_id = 1
>
> if kw['project_id'] != u'0':
> ai.project_id = int(kw['project_id'])
> else:
> ai.projects = Project(projectname = kw['project_name'])
>
> ai.date_added =
> datetime.datetime(int(kw['date_added'].split('/')[2]),
> int(kw['date_added'].split('/')[0]), int(kw['date_added'].split('/')
> [1]))
> ai.date_due = datetime.datetime(int(kw['date_due'].split('/')
> [2]), int(kw['date_due'].split('/')[0]), int(kw['date_due'].split('/')
> [1]))
> DBSession.save(ai)
>
> It looks like the line in the if statement isn't working like I hoped
> it would, ai.projects = Project(projectname = kw['project_name']).
> Appreciate some help with this... I got this construction from the
> SQLAlchemy documentation[1]. I am a very new TG user and relatively
> new with Python too.
>
> Thanks,
> Eric
>
> [1]http://www.sqlalchemy.org/docs/05/ormtutorial.html#datamapping_relate...
>
> _______________________________________________________________________
> Jetzt neu! Schützen Sie Ihren PC mit McAfee und WEB.DE. 30 Tage
> kostenlos testen.http://www.pc-sicherheit.web.de/startseite/?mc=022220
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"TurboGears" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/turbogears?hl=en
-~----------~----~----~----~------~----~------~--~---