Massimo,

Vihang is right. In my model I defined the following table:

db.define_table('adres',
    SQLField('bedrijf', db.bedrijf, default='', notnull=True),
    SQLField('adressoort', length=30, default='Vestigingsadres',
notnull=True),
    SQLField('straat', length=42, default='', notnull=True),
    SQLField('huisnummer', length=6, default='', notnull=True),
    SQLField('huisnummerextensie', length=6),
    SQLField('postcode_cijferdeel', type='integer'),
    SQLField('postcode_letterdeel'),
    SQLField('plaats', length=42, default='', notnull=True),
    migrate='adres.table')

db.adres.bedrijf.requires=IS_IN_DB(db, db.bedrijf.id, '%(bedrijfsnaam)
s')
db.adres.adressoort.requires=IS_IN_SET(['Statutair
vestigingsadres','Vestigingsadres','Postadres'])
db.adres.straat.requires=[IS_LENGTH(42,error_message=T('length exceeds
42')), IS_NOT_EMPTY()]
db.adres.huisnummer.requires=[IS_LENGTH(6,error_message=T('length
exceeds 6')), IS_NOT_EMPTY()]
db.adres.huisnummerextensie.requires=IS_LENGTH(6,error_message=T
('length exceeds 6'))
db.adres.postcode_cijferdeel.requires=IS_NULL_OR(IS_MATCH('\d
{4}',error_message=T('no match 4 digits')))
db.adres.postcode_letterdeel.requires=IS_NULL_OR(IS_MATCH('[A-Z]
{2}',error_message=T('no match 2 capitals')))
db.adres.plaats.requires=IS_IN_DB(db, db.plaats.plaats, '%(plaats)s')


In pgAdmin the SQL reads like:


CREATE TABLE adres
(
  id serial NOT NULL,
  bedrijf integer,
  adressoort character varying(30) NOT NULL,
  straat character varying(42) NOT NULL,
  huisnummer character varying(6) NOT NULL,
  huisnummerextensie character varying(6),
  postcode_cijferdeel integer,
  postcode_letterdeel character varying(32),
  plaats character varying(42) NOT NULL,
  CONSTRAINT adres_pkey PRIMARY KEY (id),
  CONSTRAINT adres_bedrijf_fkey FOREIGN KEY (bedrijf)
      REFERENCES bedrijf (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE CASCADE
)
WITH (OIDS=FALSE);


I didn't add the notnull=True later. In my applications this doesn't
raise any problems, the IS_IN_DB() validator prevents the field from
being empty. Furthermore, since the field is a foreign key I set
writable=False, and it gets its value programatically.

db.adres.bedrijf.writable=False
db.adres.bedrijf.default=auth.user.bedrijf


This is not a generic solution but it works for me. However, when you
have other applications connecting to the database this is an issue,
but why not set NOT NULL in pgAdmin using the columns properties
option?



Vihang,

When you set a notnull=True, you should also set a default='' or
whatever value. See this thread:

http://groups.google.com/group/web2py/browse_thread/thread/930401c5e2b2d2e8/89270687601e8d49?lnk=gst&q=annet+dal#89270687601e8d49



Kind regards,

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

Reply via email to