src/jocondelab/forms.py
author ymh <ymh.work@gmail.com>
Tue, 18 Jun 2013 13:35:18 +0200
changeset 22 d55bf067b61a
parent 15 8440c36660e5
child 26 758b9289aa9a
permissions -rw-r--r--
correct user administration

# -*- coding: utf-8 -*-
'''
Created on Jun 13, 2013

@author: ymh
'''
from core.models import Thesaurus, Term, TERM_URL_STATUS_CHOICES_TRANS
from django.forms import Form, fields, ModelChoiceField
from django.utils.translation import ugettext_lazy as _


class ValidateTermForm(Form):
    term_id = fields.IntegerField(required=True)
    validation_val = fields.BooleanField(required=False)
    
class ModifyWpLinkForm(Form):
    term_id = fields.IntegerField(required=True)
    label = fields.CharField(required=True, min_length=1)

class RemoveWpLinkForm(Form):
    term_id = fields.IntegerField(required=True)

def validated_to_bool(val):
    if isinstance(val, basestring) and len(val)==0:
        return None
    else:
        return bool(int(val))
         
class TermFilterForm(Form):
    thesaurus = ModelChoiceField(label=_("thesaurus"), required=False, queryset=Thesaurus.objects.all())
    label = fields.CharField(label=_("label"), required=False)
    link_status = fields.TypedChoiceField(label=_("link_status"), required=False, empty_value=-1, coerce=int, choices=tuple([(-1,'---------')]+[(v, l) for v,l in TERM_URL_STATUS_CHOICES_TRANS]))
    validated = fields.TypedChoiceField(label=_("validated"), required=False, empty_value=None, coerce=validated_to_bool, choices=(("", "---"),("1", _("yes")), ("0", _("no"))))
    order_by = fields.ChoiceField(label=_("order_by"), required=False, choices=(('normalized_label',_('label')),('uri',_('uri'))))
    order_dir = fields.ChoiceField(label=_("order_dir"), required=False, choices=(('asc',_('asc')), ('desc',_('desc'))))
    
    def get_filter_qs(self, base_qs=None):
        qs = base_qs
        if qs is None:
            qs = Term.objects.all()
        
        thes = self.cleaned_data.get('thesaurus',None)
        if thes:
            qs = qs.filter(thesaurus=thes)
            
        lk_status = self.cleaned_data.get('link_status',-1)
        if lk_status>=0:
            qs = qs.filter(url_status=lk_status)
            
        validated = self.cleaned_data.get('validated', None)
        if validated is not None:
            qs = qs.filter(validated=validated)
            
        label_regexp = self.cleaned_data.get('label', None)
        if label_regexp:
            qs = qs.filter(label__iregex=label_regexp)
        
        order_by = self.cleaned_data.get('order_by', 'normalized_label') or 'normalized_label'
        order_dir = self.cleaned_data.get('order_dir', 'asc') or 'asc'
        if order_dir == 'desc':
            order_by = "-"+order_by
        qs = qs.order_by(order_by)
        
        return qs