Yeah, I think you're right.
I already fix my app so it's good now!!

Sent from my Verizon Wireless BlackBerry

-----Original Message-----
From: villas <villa...@gmail.com>
Sender: web2py@googlegroups.com
Date: Sat, 20 Oct 2012 11:44:47 
To: <web2py@googlegroups.com>
Reply-To: web2py@googlegroups.com
Subject: [web2py] Re: Version 2.1.1 error: Table' object has no attribute '_id'

Hi Omi
I don't think composite primary keys have ever been supported,  so I 
suppose you would be on your own with that design strategy and who knows 
how it worked!   :)
D


On Friday, October 19, 2012 10:38:21 PM UTC+1, Omi Chiba wrote:
>
> It worked when I specified single prymarykey. It's kind of make sense but 
> why it worked previously and not working current?
>
>
> db.PDTFF.FFKNCD.requires=IS_NULL_OR(IS_IN_DB(db,db.TDMKNP00.KNKNCD,'%(KNKNNM)s'))
>
> *After*
> # Area 2 Master
> db.define_table('TDMKNP00',
>     Field('KNCTCD', length=3),
>     Field('KNKNCD', length=2),
>     Field('KNKNNM', length=30),
>     primarykey=['KNKNCD'])
>
> *Before*
> # Area 2 Master
> db.define_table('TDMKNP00',
>     Field('KNCTCD', length=3),
>     Field('KNKNCD', length=2),
>     Field('KNKNNM', length=30),
>     primarykey=['KNCTCD','KNKNCD'])
>
>
> On Friday, October 19, 2012 3:48:53 PM UTC-5, Omi Chiba wrote:
>>
>> It looks this line failed. Here I simply edit the record provided by 
>> user's select.
>>
>>  form = SQLFORM(db.PDTFF,record) 
>>
>>
>> On Friday, October 19, 2012 3:27:53 PM UTC-5, Omi Chiba wrote:
>>>
>>> My app was working fine with Version 1.99.2. I upgrade to Version 2.1.1 
>>> and it shows this error.
>>> I'm using DB2 for my database. PDTFF is new table defined by web2py so 
>>> it has id field but the others are existing and doesn't have id field.
>>>
>>> *Traceback (most recent call last):*
>>>   File "C:\web2py\gluon\restricted.py", line 209, in restricted
>>>     exec ccode in environment
>>>   File "C:/web2py/applications/fedex/controllers/default.py", line 205, 
>>> in <module>
>>>   File "C:\web2py\gluon\globals.py", line 187, in <lambda>
>>>     self._caller = lambda f: f()
>>>   File "C:\web2py\gluon\tools.py", line 2838, in f
>>>     return action(*a, **b)
>>>   File "C:/web2py/applications/fedex/controllers/default.py", line 116, 
>>> in next
>>>     form = SQLFORM(db.PDTFF,record)
>>>   File "C:\web2py\gluon\sqlhtml.py", line 1038, in __init__
>>>     inp = self.widgets.options.widget(field, default)
>>>   File "C:\web2py\gluon\sqlhtml.py", line 226, in widget
>>>     options = requires[0].options()
>>>   File "C:\web2py\gluon\validators.py", line 2500, in _options
>>>     options = self.other.options()
>>>   File "C:\web2py\gluon\validators.py", line 484, in options
>>>     self.build_set()
>>>   File "C:\web2py\gluon\validators.py", line 471, in build_set
>>>     records = self.dbset(table).select(*fields, **dd)
>>>   File "C:\web2py\gluon\dal.py", line 8726, in __call__
>>>     query = self.db._adapter.id_query(query)
>>>   File "C:\web2py\gluon\dal.py", line 631, in id_query
>>>     return table._id != None
>>>   File "C:\web2py\gluon\dal.py", line 7636, in __getitem__
>>>     return ogetattr(self, str(key))
>>> AttributeError: 'Table' object has no attribute '_id'
>>>
>>> *Function argument list*
>>> (self=<Table TDMKNP00 (KNCTCD,KNKNCD,KNKNNM)>, key='_id')
>>>
>>> *Model*
>>> # coding: utf8
>>>
>>> # Employee info table on HELPDESK
>>> dbh.define_table('tbluser',
>>>     Field('name', length=255),
>>>     Field('location', length=255),
>>>     Field('emailaddress', length=255))
>>>
>>> # Dept Master
>>> db.define_table('TDMBUP01',
>>>     Field('BUSEC1', length=3),
>>>     Field('BUBURK', length=12),
>>>     primarykey=['BUSEC1'])
>>>
>>> # Country Master
>>> db.define_table('TDMCNP00',
>>>     Field('CNCNCD', length=3),
>>>     Field('CNCNNM', length=30),
>>>     primarykey=['CNCNCD'])
>>>
>>> # Area 2 Master
>>> db.define_table('TDMKNP00',
>>>     Field('KNCTCD', length=3),
>>>     Field('KNKNCD', length=2),
>>>     Field('KNKNNM', length=30),
>>>     primarykey=['KNCTCD','KNKNCD'])
>>>
>>> # Purchase Order
>>> db.define_table('SDTH2P01',
>>>     Field('H2DNO', length=8),
>>>     Field('H2TRD1', 'integer'),
>>>     Field('H2JJDN', length=8),
>>>     Field('H2JJGN', 'integer'),
>>>     Field('H2JDNO', length=8),
>>>     Field('H2JGNO', 'integer'),
>>>     Field('H2JCSC', length=3),
>>>     Field('H2HSKB', length=1),
>>>     Field('H2KSM', length=3),
>>>     Field('H2PRCD', length=15),
>>>     Field('H2PRKJ', length=50),
>>>     Field('H2TRS', 'integer'),
>>>     Field('H2HZS', 'integer'),
>>>     primarykey=['H2DNO'])
>>>
>>> # Open FedEx Purchase Order 
>>> db.define_table('SDTH2PF1',
>>>     Field('H2DNO', length=8),
>>>     Field('H2TRD1', 'integer'),
>>>     Field('H2JJDN', length=8),
>>>     Field('H2JJGN', 'integer'),
>>>     Field('H2JDNO', length=8),
>>>     Field('H2JGNO', 'integer'),
>>>     Field('H2JCSC', length=3),
>>>     Field('H2HSKB', length=1),
>>>     Field('H2KSM', length=3),
>>>     Field('H2PRCD', length=15),
>>>     Field('H2PRKJ', length=50),
>>>     Field('H2TRS', 'integer'),
>>>     Field('H2HZS', 'integer'),
>>>     primarykey=['H2DNO'])
>>>
>>> # Received Order
>>> db.define_table('SDTJ2P00',
>>>     Field('J2DNO', length=8),
>>>     Field('J2GNO', 'integer'),
>>>     Field('J2TSCD',length=8),
>>>     Field('J2TSK1',length=35),
>>>     Field('J2TSK2',length=35),
>>>     Field('J2TSPE',length=22),
>>>     Field('J2ODA1',length=30),
>>>     Field('J2ODA2',length=30),
>>>     Field('J2ODA7',length=20),
>>>     Field('J2KNCD',length=2),
>>>     Field('J2CNCD',length=3),
>>>     Field('J2OYUB',length=10),
>>>     Field('J2OTEL',length=20),
>>>     Field('J2KYSC',length=12),
>>>     Field('J2NSD','integer'),
>>>     primarykey=['J2DNO','J2GNO'])
>>>
>>> # FedEx Request Output file
>>> db.define_table('PDTFF',
>>>     Field('FFDNO', length=8, label='HJ#'),
>>>     Field('FFTRD', 'date', label="Requested"),
>>>     Field('FFJCSC', length=3, label="Dept"),
>>>     Field('FFBURK', length=12, label="Dept Name"),
>>>     Field('FFJDNO', length=8, label="JJ#"),
>>>     Field('FFJGNO', 'integer', label="JJ line#"),
>>>     Field('FFJJDN', length=8, label="J# (JP)"),
>>>     Field('FFJJGN', 'integer', label="J line# (JP)"),
>>>     Field('FFACCT', length=9, label="FedEx Acct #"),
>>>     Field('FFCUST', length=30, label="Company Name"),
>>>     Field('FFNSD', 'date',label="Delivery Due"),
>>>     Field('FFPRCD', length=15,label="Product Code"),
>>>     Field('FFPRKJ', length=50,label="Part Number"),
>>>     Field('FFTRS', 'integer',label="Quantity"),
>>>     Field('FFTSK1',length=35,label="Name 1"),
>>>     Field('FFTSK2',length=35,label="Name 2"),
>>>     Field('FFTSPE',length=22,label="Attn:"),
>>>     Field('FFODA1',length=30,label="Address 1"),
>>>     Field('FFODA2',length=30,label="Adderss 2"),
>>>     Field('FFODA7',length=20,label="City"),
>>>     Field('FFKNCD',length=2,label="State"),
>>>     Field('FFCNCD',length=3,label="Country"),
>>>     Field('FFOYUB',length=10,label="Zip"),
>>>     Field('FFOTEL',length=20,label="Phone"),
>>>     Field('FFKYSC',length=12,label="Customer Order#"),
>>>     Field('FFSPCL','boolean',label="Special Instruction"),
>>>     Field('FFJPKB','boolean',label="JP Confirmed"),
>>>     Field('FFRMKS',length=128,label="Remarks"), 
>>>     Field('FFCUSR',length=128,label="Created by"),  
>>>     Field('FFCDAT','datetime',label="Created on"),  
>>>     Field('FFUUSR',length=128,label="Updated by"),  
>>>     Field('FFUDAT','datetime',label="Updated on"),
>>>     )
>>>
>>> db.PDTFF.FFDNO.writable = False
>>> db.PDTFF.FFTRD.writable = False
>>> db.PDTFF.FFTRD.requires=IS_DATE(format='%m/%d/%y')
>>> db.PDTFF.FFJCSC.writable = False
>>> db.PDTFF.FFBURK.writable = False
>>> db.PDTFF.FFJDNO.writable = False
>>> db.PDTFF.FFJGNO.writable = False
>>> db.PDTFF.FFJJDN.writable = False
>>> db.PDTFF.FFJJGN.writable = False
>>> db.PDTFF.FFPRCD.writable = False
>>> db.PDTFF.FFPRKJ.writable = False
>>> db.PDTFF.FFACCT.requires=[IS_NOT_EMPTY(),IS_UPPER(),IS_LENGTH(9,9,error_message='enter
>>>  
>>> 9 characters'),IS_UPPER()]
>>> db.PDTFF.FFCUST.requires=[IS_NOT_EMPTY(),IS_LENGTH(30,1),IS_UPPER()]
>>> db.PDTFF.FFNSD.requires=IS_DATE(format='%m/%d/%y',error_message='enter 
>>> date as mm/dd/yy')
>>> db.PDTFF.FFTRS.requires=IS_INT_IN_RANGE(1,99999999,error_message='Cannot 
>>> exceed 99,999,999')
>>>
>>> db.PDTFF.FFTSK1.requires=[IS_NOT_EMPTY(),IS_LENGTH(35,1),IS_UPPER()]
>>> db.PDTFF.FFTSK2.requires=IS_NULL_OR([IS_LENGTH(35,1),IS_UPPER()])
>>> db.PDTFF.FFTSPE.requires=IS_NULL_OR([IS_LENGTH(22,1),IS_UPPER()])
>>> db.PDTFF.FFODA1.requires=[IS_NOT_EMPTY(),IS_LENGTH(30,1),IS_UPPER()]
>>> db.PDTFF.FFODA2.requires=IS_NULL_OR([IS_LENGTH(30,1),IS_UPPER()])
>>> db.PDTFF.FFODA7.requires=[IS_NOT_EMPTY(),IS_LENGTH(20,1),IS_UPPER()]
>>> # Dropdown list from Area 2 Master
>>>
>>> db.PDTFF.FFKNCD.requires=IS_NULL_OR(IS_IN_DB(db,'TDMKNP00.KNKNCD','%(KNKNNM)s'))
>>> db.PDTFF.FFOYUB.requires=[IS_NOT_EMPTY(),IS_LENGTH(20,1),IS_UPPER()]
>>> # Dropdown list from Country Master
>>> db.PDTFF.FFCNCD.requires=IS_IN_DB(db,'TDMCNP00.CNCNCD','%(CNCNNM)s')
>>> db.PDTFF.FFOTEL.requires=[IS_NOT_EMPTY(),IS_LENGTH(20,1),IS_UPPER()]
>>> db.PDTFF.FFKYSC.requires=[IS_NOT_EMPTY(),IS_LENGTH(12,1),IS_UPPER()]
>>> db.PDTFF.FFJPKB.writable = False 
>>> db.PDTFF.FFRMKS.requires=IS_NULL_OR([IS_LENGTH(128,1),IS_UPPER()])
>>> db.PDTFF.FFCUSR.writable = False
>>> db.PDTFF.FFCDAT.writable = False
>>> db.PDTFF.FFCDAT.requires=IS_DATETIME(format='%m/%d/%y %H:%M:%S')
>>> db.PDTFF.FFUUSR.writable = False
>>> db.PDTFF.FFUDAT.writable = False
>>> db.PDTFF.FFUDAT.requires=IS_DATETIME(format='%m/%d/%y %H:%M:%S')
>>>
>>> *Controller*
>>> def next():
>>>     keyHJ = request.args(0) or redirect(URL('index'))       
>>>     record = db.PDTFF(db.PDTFF.FFDNO==keyHJ)
>>>     
>>>     hj = db.SDTH2P01(db.SDTH2P01.H2DNO==keyHJ)
>>>     
>>>     # Get information from purcharse order transaction      
>>>     db.PDTFF.FFDNO.default = hj.H2DNO.strip()
>>>     db.PDTFF.FFPRCD.default = hj.H2PRCD.strip()
>>>     db.PDTFF.FFPRKJ.default = hj.H2PRKJ.strip()
>>>     db.PDTFF.FFTRS.default = int(hj.H2TRS)
>>>     db.PDTFF.FFJJDN.default = hj.H2JJDN.strip()
>>>     db.PDTFF.FFJJGN.default = hj.H2JJGN
>>>     db.PDTFF.FFJDNO.default = hj.H2JDNO.strip()
>>>     db.PDTFF.FFJGNO.default = hj.H2JGNO
>>>     db.PDTFF.FFJCSC.default = hj.H2JCSC.strip()
>>>     
>>>     # Get Dept name
>>>     if hj.H2JCSC<>"":
>>>         bu = db.TDMBUP01(db.TDMBUP01.BUSEC1==hj.H2JCSC)
>>>         db.PDTFF.FFBURK.default = bu.BUBURK.strip() or None        
>>>     
>>>     key1 = hj.H2JDNO
>>>     key2 = hj.H2JGNO
>>>     
>>>     jj = db.SDTJ2P00((db.SDTJ2P00.J2DNO==key1) & 
>>> (db.SDTJ2P00.J2GNO==key2))
>>>     
>>>     # Get Received Order information if exist      
>>>     if jj <> None:
>>>          db.PDTFF.FFKYSC.default = jj.J2KYSC.strip()
>>>          db.PDTFF.FFTSK1.default = jj.J2TSK1.strip()
>>>          db.PDTFF.FFTSK2.default = jj.J2TSK2.strip()
>>>          db.PDTFF.FFTSPE.default = jj.J2TSPE.strip()
>>>          db.PDTFF.FFODA1.default = jj.J2ODA1.strip()
>>>          db.PDTFF.FFODA2.default = jj.J2ODA2.strip()
>>>          db.PDTFF.FFODA7.default = jj.J2ODA7.strip()
>>>          db.PDTFF.FFKNCD.default = jj.J2KNCD.strip()
>>>          db.PDTFF.FFOYUB.default = jj.J2OYUB.strip()
>>>          db.PDTFF.FFCNCD.default = jj.J2CNCD.strip()
>>>          db.PDTFF.FFOTEL.default = jj.J2OTEL.strip() 
>>>          
>>>          import datetime
>>>          y = int(str(jj.J2NSD)[0:4])
>>>          m = int(str(jj.J2NSD)[4:6])
>>>          d = int(str(jj.J2NSD)[6:8])
>>>          db.PDTFF.FFNSD.default = datetime.date(y, m, d)    
>>>     
>>>     # Login User and current date     
>>>     user = dba.auth_user(auth.user_id)    
>>>     db.PDTFF.FFCUSR.default = user.username.upper()
>>>     db.PDTFF.FFCDAT.default = request.now   
>>>     db.PDTFF.FFTRD.default  = request.now.date
>>>                 
>>>     # Form editable or readonly    
>>>     if record == None and hj.H2HZS>0: # New entry
>>>         form = SQLFORM(db.PDTFF,record)        
>>>         form.vars.FFUUSR = user.username.upper()
>>>         form.vars.FFUDAT = request.now      
>>>         
>>>         if request.vars.FFSPCL == 'on': # Automatically set JP Checked 
>>> if not Special Instruction
>>>             form.vars.FFJPKB = False
>>>         else:
>>>             form.vars.FFJPKB = True
>>>         
>>>     elif record <> None and record.FFJPKB<>True and hj.H2HZS>0: # Update 
>>> when JP Chcked is unchcked
>>>         # Only editable by Admin     
>>>         if auth.has_membership(role = 'admin'):
>>>             db.PDTFF.FFJPKB.writable = True 
>>>             
>>>         form = SQLFORM(db.PDTFF,record)        
>>>         form.vars.FFUUSR = user.username.upper()
>>>         form.vars.FFUDAT = request.now      
>>>         
>>>     elif record <> None and record.FFJPKB==True and hj.H2HZS>0 and 
>>> auth.has_membership(role = 'admin'): # Update when JP Chcked is chcked. 
>>> Only Admin can edit the form
>>>         db.PDTFF.FFJPKB.writable = True
>>>         form = SQLFORM(db.PDTFF,record)        
>>>         form.vars.FFUUSR = user.username.upper()
>>>         form.vars.FFUDAT = request.now      
>>>         
>>>     else:
>>>         form = SQLFORM(db.PDTFF,record, readonly=True)    # Read only
>>>    
>>>     if form.process(onvalidation=spcheck).accepted:
>>>         session.flash = 'Form accepted'
>>>         redirect(URL(request.args(1)))
>>>     elif form.errors:
>>>         response.flash = 'Form has errors'
>>>     return dict(form=form)
>>>
>>>
>>>
>>>
>>>
>>>
>>>

-- 




-- 



Reply via email to