Blame view

src/user_manager/forms.py 2.82 KB
94082e77   haribo   Date: 03/06/2016
1
2
3
from django import forms
from pyrosapp.models import PyrosUser, Country, UserLevel, ScientificProgram
from django.contrib.auth.models import User
3df2d31a   haribo   #3430 : dates are...
4

94082e77   haribo   Date: 03/06/2016
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
class PyrosUserCreationForm(forms.ModelForm):
    '''
        Form used at user creation.
        
        IMPORTANT : The user must not be able to choose his Country, Scientific Program(s), Quota, Priority, and User Level 
    '''

    email = forms.EmailField(label="Email", widget=forms.TextInput)

    password = forms.CharField(label='Password', widget=forms.PasswordInput)
    password_confirm = forms.CharField(label='Password confirmation', widget=forms.PasswordInput)

    first_name = forms.CharField(label='First name')
    last_name = forms.CharField(label='Last name')

    class Meta:
        model = PyrosUser
        fields = ('tel', 'laboratory', 'address')
#         fields = ('user.email', 'user_password', 'user_first_name', 'user_last_name', 'tel', 'laboratory', 'address')

    def __init__(self, *args, **kwargs):
        super(PyrosUserCreationForm, self).__init__(*args, **kwargs)
        self.fields.move_to_end('tel', True)
        self.fields.move_to_end('laboratory', True)
        self.fields.move_to_end('address', True)
        for field in self.fields.values():
            field.required = True
            field.widget.attrs['class'] = "form-control"

    def clean_password_confirm(self):
        '''
            Checks if password and confirmation are equal
        '''
        password = self.cleaned_data.get("password")
        password_confirmation = self.cleaned_data.get("password_confirm")
        if password and password_confirmation and password != password_confirmation:
            raise forms.ValidationError("Passwords don't match")
        return password_confirmation

    def clean_email(self):
        '''
            Checks if the email already exists in DB
        '''
        email = self.cleaned_data.get("email")
        if User.objects.filter(email=email).exists():
            raise forms.ValidationError("Email address already taken")
        return email

    def save(self):
        '''
            Creates a User and a PyrosUser in DB
        '''
        user = User.objects.create_user(username=self.cleaned_data['email'])
        user.email = self.cleaned_data['email']
        user.set_password(self.cleaned_data['password'])
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.save()

        pyros_user = PyrosUser.objects.create(user=user, country=Country.objects.all()[0],
                                              user_level=UserLevel.objects.all()[0],
                                              tel=self.cleaned_data['tel'], laboratory=self.cleaned_data['laboratory'],
                                              address=self.cleaned_data['address'])
        return pyros_user