The error is here: IS_NOT_IN_DB(db,db.strona)
the second argument has to be a field, not a table. On Jul 20, 8:10 am, Karol Grębski <[email protected]> wrote: > I'm not sure if I'm doing something wrong, or if it's a bug in web2py, > but I get an interesting ticket when I try tu submit a new news into > my database. Any sudgestions? > > *** > > Traceback (most recent call last): > File "/home/mlody/Desktop/cherry/web2py/gluon/restricted.py", line > 107, in restricted > exec ccode in environment > File "/home/mlody/Desktop/cherry/web2py/applications/komi/ > controllers/default.py", line 106, in <module> > File "/home/mlody/Desktop/cherry/web2py/gluon/globals.py", line 100, > in <lambda> > self._caller = lambda f: f() > File "/home/mlody/Desktop/cherry/web2py/gluon/tools.py", line 1256, > in f > return action(*a, **b) > File "/home/mlody/Desktop/cherry/web2py/applications/komi/ > controllers/default.py", line 65, in nowa_wiesc > if form.accepts(request.vars, session): > File "/home/mlody/Desktop/cherry/web2py/gluon/sqlhtml.py", line 709, > in accepts > onvalidation, > File "/home/mlody/Desktop/cherry/web2py/gluon/html.py", line 1122, > in accepts > status = self._traverse(status) > File "/home/mlody/Desktop/cherry/web2py/gluon/html.py", line 439, in > _traverse > newstatus = c._traverse(status) and newstatus > File "/home/mlody/Desktop/cherry/web2py/gluon/html.py", line 439, in > _traverse > newstatus = c._traverse(status) and newstatus > File "/home/mlody/Desktop/cherry/web2py/gluon/html.py", line 439, in > _traverse > newstatus = c._traverse(status) and newstatus > File "/home/mlody/Desktop/cherry/web2py/gluon/html.py", line 439, in > _traverse > newstatus = c._traverse(status) and newstatus > File "/home/mlody/Desktop/cherry/web2py/gluon/html.py", line 446, in > _traverse > newstatus = self._validate() > File "/home/mlody/Desktop/cherry/web2py/gluon/html.py", line 935, in > _validate > (value, errors) = validator(value) > File "/home/mlody/Desktop/cherry/web2py/gluon/validators.py", line > 303, in __call__ > (tablename, fieldname) = str(self.field).split('.') > ValueError: need more than 1 value to unpack > > *** > > The controller function is: > > *** > > @auth.requires_login() > def nowa_wiesc(): > form = SQLFORM.factory( > SQLField('tytul', requires=[IS_NOT_EMPTY(), IS_NOT_IN_DB(db, > db.strona)]), > SQLField('tresc', 'text', requires=IS_NOT_EMPTY()), > SQLField('zrodlo', length=2000, requires=IS_NULL_OR(IS_URL > ())), > labels={'tytul':'Tytuł', 'tresc':'Treść wieści', > 'zrodlo':'Link do źródła'}) > > if form.accepts(request.vars, session): > strona_id = db.strona.insert( > tytul=form.vars.tytul, > adres=CLEANUP(form.vars.tytul), > tresc=form.vars.tresc, > statyczna=False > status=2) > > wiesc_id = db.wiesc.insert( > strona=strona_id, > zrodlo=form.vars.zrodlo) > > db.wiesc_glos.insert(wiesc=wiesc_id) > > redirect(URL(r=request, f='wiesc', args=CLEANUP > (form.vars.tytul))) > > return dict(formularz=form) > > *** > > And my model is: > > *** > > db.define_table('strona', > SQLField('tytul'), > SQLField('adres'), > SQLField('statyczna', 'boolean'), > SQLField('tresc', 'text'), > SQLField('kto', db.auth_user), > SQLField('kiedy', 'datetime'), > SQLField('status', 'integer')) > > db.strona.tytul.length = 120 > db.strona.tytul.requires = IS_NOT_EMPTY() > db.strona.adres.requires = IS_NOT_EMPTY() > db.strona.kto.default = auth.user.id if auth.user else 0 > db.strona.kto.writable = False > db.strona.kiedy.default = request.now > db.strona.kiedy.writable = False > > db.define_table('wiesc', > SQLField('strona', db.strona), > SQLField('zrodlo')) > > db.wiesc.zrodlo.length = 2000 > > db.define_table('wiesc_glos', > SQLField('kto', db.auth_user), > SQLField('kiedy', 'datetime'), > SQLField('wiesc', db.wiesc)) > > db.wiesc_glos.kto.default = auth.user.id if auth.user else 0 > db.wiesc_glos.kto.writable = False > db.wiesc_glos.kiedy.default = request.now > db.wiesc_glos.kiedy.writable = False > > *** > > I also think I should explain some conventions: > - the table 'strona' conatins generally all type of pages content > (articles, news etc), > - 'tytul' means 'title', > - 'tresc' means 'content', > - 'adres' means 'adres' ;) (I use that for a cleaned version of the > title which I use in URLs), > - 'statyczna' means 'static' (true if it's not any 'special' page > type like an article, a news etc), > - 'kto' means 'who', > - 'kiedy' means 'when', > - 'status' can have 3 values: 0 means that the page is a draft, 1 > that it is private, 2 that it is public, > - the table 'wiesc' contains news (the shared functionality of > different page types is put into 'pages' - that's somewhat similiar to > the 'nodes' idea in Drupal, if you're familiar with it), > - 'strona' is of course a refference to a page, > - 'zrodlo' contains a URL which is the source of the news, > - the users can vote on news - it should work somewhat similiar to > digg - that's what the 'wiesc_glos' table is for, > - 'kto' means 'who' (the user who voted), > - 'kiedy' means 'when' (when the vote was made, I'm not really sure > if I need this one...), > - 'wiesc' is (as you can see) a relation with a news (the news that > the user votes for). > > (Jeez, I have to switch to english names, or it'll be a pain in the > ass to ask for help here more frequently. ^^) > > What I'm trying to do in the controller is to create a new news (which > needs a page). I also assume that the news author would vote on the > news, so I do that automatically. The problem seems to be with the > 'form.accepts' call. Am I doing something wrong with it? > > Cheers! --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py-users" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---

