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

<*> 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

 


Responder a