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.com) 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://www.wadecybertech.com
http://www.warplydesigned.com
http://www.fitnessfriendsfinder.com