I want to select one of many parent records, and send selection parm,
parent_id to sqlFactory to add child record. I think I need a virutual
filed for this, correct?
Goal is to add a new address, to an already-existing address for parent
table db.Party. db.Address contains addresses only, and
db.PartyAddressIntersection is where the one-to-many addresses are linked
to db.Party.
Can anyone please write the code for creating a virtual field in parent
table db.Party, that sends user to Factory with correct parms for parent
record?
There is an already-existing controller for adding both a totally new
parent, and child below (add_new_person). What is needed, besides the
parms, is a controller that that looks like the already-existing one below,
but does not add a new parent. It gets the parent_id (PartyID) sent to it
from the virtual field.
To summarize:
1. User scrolls through sqlForm searching through table db.Party. At the
end of each record, is a virtual field that is a link that user can click
on labeled "click here to add another address to this party".
2. The link sends user to Factory, and also sends the record_id for the
row that user selected.
3. Factory reads the record_id sent to it from the link and creates a
new address for the correct parent, db.Party. To do this, it adds a new
record to two tables, db.PartyAddressIntersection and db.Address
Here are the models
db.define_table('Address', ## no reference to Party in this table. Just
addressses. Party is referenced in intersection table below.
Field('addressLine_1','string'),
Field('addressLine_2','string'),
Field('addressLine_3','string'),
Field('subDistrictOrTwonshipOrCantonOrWard','string'),
Field('district','string'),
Field('city','string'),
Field('countyOrParish','string'),
Field('stateOrProvinceOrCommonwealth','string'),
Field('zipOrPostalCode','string'),
Field('countryCode','string'))
##
------------------------------------------------------------------------------------------
db.define_table('PartyAddressIntersection',
Field('partyID','reference Party'),
Field('addressID','reference Address'),
Field('addressTypeID','reference AddressType',comment='Choose address type,
or email us to suggest a new category'))
Here is the controller that needs to be modified so that it accepts
parent_record_id from link and doesn't add record to parent tables
(ObjectSuperType, auth_user, Party). It only has to add records to
db.Address and db.PartyAddressIntersection.
def add_new_person():
db.ObjectSuperType.objectTypeID.readable =
db.ObjectSuperType.objectTypeID.writable = False ## don't let user see
field thinking they have to fill it in
db.Party.objectID.readable = db.Party.objectID.writable = False ##
don't let user see field thinking they have to fill it in
db.auth_user.partyID.readable = db.auth_user.partyID.writable = False
## don't let user see field thinking they have to fill it in
db.Party.partyTypeID.readable = db.Party.partyTypeID.writable = False
## don't let user see field thinking they have to fill it in
db.PartyAddressIntersection.addressID.readable =
db.PartyAddressIntersection.addressID.writable = False ## don't let user
see field
db.Address.id.readable = db.Address.id.writable = False ## don't let
user see field
db.Party.partyTypeID.default = 1 ## sets up db so it's a person, not
organization
db.ObjectSuperType.objectTypeID.default = 1 ## sets up db so object
type is designated as a party (not a component)
form=SQLFORM.factory(db.ObjectSuperType,db.Party,db.auth_user,db.PartyAddressIntersection,db.Address)
if form.process().accepted:
objectID =
db.ObjectSuperType.insert(**db.ObjectSuperType._filter_fields(form.vars))
form.vars.objectID=objectID
partyID = db.Party.insert(**db.Party._filter_fields(form.vars))
form.vars.partyID=partyID
partyID =
db.auth_user.insert(**db.auth_user._filter_fields(form.vars))
addressID =
db.Address.insert(**db.Address._filter_fields(form.vars))
form.vars.addressID=addressID
partyID =
db.PartyAddressIntersection.insert(**db.PartyAddressIntersection._filter_fields(form.vars))
response.flash='Thanks for filling the form'
return dict(form=form)
thanks,
Alex Glaros
--
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.