Ok thanks I was trying that except I couldn't figure out how to do the last part 'ads.url' to point to that field, kept getting ads does not exist error because I wasn't using the ' ' with ads.url.
What about the second problem? Is it possible to allow null but also have the IS_IN_DB to provide a select combo? In other words if some ones location does not exist currently in the database I want to give them a checkbox that if checked country, province and city can be NULL, behind the scene the checkbox will email customer service to contact that member about the location to add etc.. Thanks, Bruce On Fri, Jan 6, 2012 at 5:18 PM, Anthony <abasta...@gmail.com> wrote: > unique=True is enforced at the level of the database, not the form. If you > want to validate form input, you have to provide a validator in the field's > "requires" attribute: > > Field('url', unique=True, requires=[IS_NOT_IN_DB(db, 'ads.url'), IS_URL()]) > > See http://web2py.com/books/default/chapter/29/6#Record-representationand > http://web2py.com/books/default/chapter/29/7#Database-validators. > > Anthony > > > On Friday, January 6, 2012 7:34:10 PM UTC-5, Detectedstealth wrote: >> >> When using unique=True on my database model the validation is allowing >> duplicates to pass through the form validation. Also notnull=False does NOT >> allow me to store Null entries for country, province, city. >> >> db.define_table('ads', >> Field('member_id', db. user_account, default=auth.user.account_id), >> Field('points', 'integer', default=0), >> Field('url', unique=True, requires=IS_URL()), >> Field('language', db.languages, requires=IS_IN_DB(db, db.languages.id, >> '%(language)s')), >> Field('country', db.countries, requires=IS_IN_DB(db, db.countries.id, >> '%(name)s'), notnull=False, default=None), >> Field('province', db.provinces, requires=IS_IN_DB(db, db.provinces.id, >> '%(name)s'), notnull=False, default=None), >> Field('city', db.cities, requires=IS_IN_DB(db, db.cities.id, >> '%(name)s'), notnull=False, default=None), >> Field('accepted', 'boolean', default=False), >> Field('viewable', 'boolean', default=True), >> Field('updated_at', 'datetime', default=request.now, writable=False), >> Field('added_at', 'datetime', default=request.now, writable=False) >> ) >> >> def createad(): >> table = ads_api.getDatabaseTable() >> table.member_id.readable = table.member_id.writable = False >> table.accepted.readable = table.accepted.writable = False >> form = SQLFORM(table) >> if form.accepts(request,session, keepvalues=True): >> response.flash = 'form accepted' >> elif form.errors: >> response.flash = 'form has errors' >> else: >> response.flash = 'please fill the form' >> return dict(form=form) >> >> IntegrityError: duplicate key value violates unique constraint "ads_url_key" >> DETAIL: Key (url)=(http://wadecybertech.co**m) already exists. >> >> >> Am I doing something incorrect? I basically want a form that allows country, >> province, city to be NULL OR a valid item already in the database, finally I >> want the url column to be unique. However when a value already exists and I >> submit the form I get the IntegrityError. >> >> >> -- >> -- >> Regards, >> Bruce Wade >> http://ca.linkedin.com/in/**brucelwade<http://ca.linkedin.com/in/brucelwade> >> http://www.wadecybertech.com >> http://www.warplydesigned.com >> http://www.**fitnessfriendsfinder.com<http://www.fitnessfriendsfinder.com> >> > -- -- Regards, Bruce Wade http://ca.linkedin.com/in/brucelwade http://www.wadecybertech.com http://www.warplydesigned.com http://www.fitnessfriendsfinder.com