src/p4l/forms.py
author cavaliet
Wed, 11 Sep 2013 13:41:47 +0200
changeset 70 2ee11f57e318
parent 5 62e97cd13730
child 113 c05567404888
permissions -rw-r--r--
language list in directive template
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
'''
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
Created on Aug 4, 2013
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
@author: ymh
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
'''
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
from django.conf import settings
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
from django.contrib.auth import get_user_model
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
from django.contrib.auth.forms import (UserChangeForm as AuthUserChangeForm, 
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
    UserCreationForm as AuthUserCreationForm)
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
from django.core.exceptions import ValidationError
4
047675624f45 first step of title search in list of records
cavaliet
parents: 0
diff changeset
    12
from django.forms import Form
047675624f45 first step of title search in list of records
cavaliet
parents: 0
diff changeset
    13
from django.forms.fields import ChoiceField, CharField
0
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
from django.utils.translation import ugettext as _
4
047675624f45 first step of title search in list of records
cavaliet
parents: 0
diff changeset
    15
from .models import Record
0
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
User = get_user_model()
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
class UserCreationform(AuthUserCreationForm):
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
    class Meta:
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
        model = User
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
        
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
    def clean_username(self):
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
        # Since User.username is unique, this check is redundant,
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
        # but it sets a nicer error message than the ORM. See #13147.
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
        username = self.cleaned_data["username"]
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
        try:
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
            User.objects.get(username=username)
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
        except User.DoesNotExist:
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
            return username
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
        raise ValidationError(self.error_messages['duplicate_username'])    
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
    
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
class UserChangeForm(AuthUserChangeForm):
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
    language = ChoiceField(label=_("language"), choices=[(k,_(v)) for k,v in settings.LANGUAGES], initial=settings.LANGUAGE_CODE[:2])
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
    class Meta:
81e7900b06a7 First import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
        model = User
4
047675624f45 first step of title search in list of records
cavaliet
parents: 0
diff changeset
    39
047675624f45 first step of title search in list of records
cavaliet
parents: 0
diff changeset
    40
047675624f45 first step of title search in list of records
cavaliet
parents: 0
diff changeset
    41
class RecordFilterForm(Form):
047675624f45 first step of title search in list of records
cavaliet
parents: 0
diff changeset
    42
    title = CharField(required=True, min_length=1)
047675624f45 first step of title search in list of records
cavaliet
parents: 0
diff changeset
    43
    def get_filter_qs(self, qs=None):
047675624f45 first step of title search in list of records
cavaliet
parents: 0
diff changeset
    44
        if qs is None:
5
62e97cd13730 debug query and enhance display
cavaliet
parents: 4
diff changeset
    45
            qs = Record.objects.select_related("language").prefetch_related('titles').distinct()  # @UndefinedVariable
4
047675624f45 first step of title search in list of records
cavaliet
parents: 0
diff changeset
    46
        t = self.cleaned_data.get('title',None)
047675624f45 first step of title search in list of records
cavaliet
parents: 0
diff changeset
    47
        if t:
047675624f45 first step of title search in list of records
cavaliet
parents: 0
diff changeset
    48
            qs = qs.filter(titles__title__icontains=t)
047675624f45 first step of title search in list of records
cavaliet
parents: 0
diff changeset
    49
        return qs
047675624f45 first step of title search in list of records
cavaliet
parents: 0
diff changeset
    50