Dorneles, obrigada pela ajuda, funcionou direitinho. Mas o Ruda tem razão, isso é pura magia negra. Um livro hein... fico aguardando ansiosamente! ;-) []'s Elisandra
Ruda Filgueiras escreveu: > Deo.. > Isso é magia negra mesmo..! eheh > > De qualquer forma seria muito bom se esse tipo de coisa estivesse mais > documentado. :-) > /me acha que Deo deveria escrever um livro de AT recipes, um tipo de > AT CookBook! > > PS: Se precisar de um ajudante para essa tarefa eu sou voluntário. > > On 7/28/06, Dorneles Treméa <[EMAIL PROTECTED]> wrote: > > Oi Elisandra, > > > > > Fiz uma classe com dois campos em que um deles deve ser preenchido > > > obrigatoriamente, o usuário que escolhe qual dos dois quer preencher, > > > mas não sei como fazer isso no Achetypes, alguém poderia me dar > uma luz? > > > > campos 'condicionalmente obrigatórios', volta e meia alguém sempre > > precisa disso... :-) > > > > Uma das saídas é usar um dos 3 hooks de validação existentes, que são > > chamados na seguinte ordem: > > > > - pre_validate(self, REQUEST, errors) > > - validate_CAMPO(value) > > - post_validate(self, REQUEST, errors) > > > > Mesmo o segundo hook recebendo apenas o valor, ainda é possível > > ter acesso ao REQUEST (self.REQUEST) e dessa forma, consultar os > > valores de outros campos. > > > > A diferença entre os hooks está apenas na ordem em que eles são > > chamados. Caso o pre_validate acuse algum erro, a validação é > > interrompida e os erros são exibidos. Já o post_validate é sempre > > executado após a validação individual de todos os campos, então > > ele pode, caso necessário, mudar o resultado da validação, tanto > > adicionando erros, como removendo. > > > > Os métodos {pre,post}_validate retornam None quando não há erro, > > ou quando há, um dicionário contendo nas chaves o nome dos campos > > e nos valores os erros a serem exibidos para cada campo. O método > > validate_CAMPO (onde sim, CAMPO é o nome do campo...) retorna None > > para informar que não há erro ou a mensagem a ser exibida, caso > > tenha erro. > > > > Exemplo para o post_validate, definido na classe do teu conteúdo: > > > > def post_validate(self, REQUEST, errors): > > # Caso nenhum dos dois campos tenha sido preenchido > > if not REQUEST.get('campo1') and not REQUEST.get('campo2'): > > msg = 'Você precisa preencher o campo1 ou o campo2.' > > errors['campo1'] = msg > > errors['campo2'] = msg > > # Caso ambos tenham sido preenchido > > if REQUEST.get('campo1') and REQUEST.get('campo2'): > > msg = 'Você precisa preencher o campo1 ou o campo2, não ambos.' > > errors['campo1'] = msg > > errors['campo2'] = msg > > > > HTH, > > > > -- > > > > Dorneles Treméa > > X3ng Web Technology > > > > > > Para enviar uma mensagem: zope-pt@yahoogrupos.com.br > > Para desistir envie uma mensagem em branco para: > [EMAIL PROTECTED] > > Links do Yahoo! Grupos > > > > > > > > > > > > > > > > > > > -- > Rudá Porto Filgueiras > Empresa Livre > http://www.empresalivre.com.br > Para enviar uma mensagem: zope-pt@yahoogrupos.com.br Para desistir envie uma mensagem em branco para: [EMAIL PROTECTED] Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/zope-pt/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
begin:vcard fn:Elisandra Fidler Pez n:;Elisandra Fidler Pez org;quoted-printable:Universidade de Caxias do Sul;N=C3=BAcleo de Processamento de Dados adr;dom:;;;Caxias do Sul;RS email;internet:[EMAIL PROTECTED] title:Analista de Sistemas tel;work:(54) 218-2198 Ramal 2306 version:2.1 end:vcard