bound organiser with user model and create signal which create organiser model when user is organiser

remotes/origin/1203
Nazar Kotjuk 12 years ago
parent b89ccb3516
commit c1d578982d
  1. 4
      accounts/admin.py
  2. 6
      accounts/forms.py
  3. 87
      accounts/models.py
  4. 2
      functions/form_check.py
  5. 44
      organiser/models.py

@ -8,8 +8,6 @@ from forms import UserCreationForm, UserChangeForm
class UserAdmin(UserAdmin):
form = UserChangeForm
@ -23,7 +21,7 @@ class UserAdmin(UserAdmin):
(None, {'fields': ('url', 'country', 'city', 'position',
'about', 'phone', 'avatar', 'web_page',
'social', 'title', 'descriptions', 'keywords',
'is_admin', 'is_active')}),
'is_admin', 'is_active', 'is_translator', 'is_organiser')}),
)
add_fieldsets = (

@ -6,6 +6,8 @@ from country.models import Country
from city.models import City
from company.models import Company
from organiser.models import Organiser
#functions
from functions.form_check import translit_with_separator
class UserCreationForm(forms.ModelForm):
password1 = forms.CharField(label='Пароль', widget=forms.PasswordInput(render_value=False))
@ -35,7 +37,6 @@ class UserCreationForm(forms.ModelForm):
return password2
def save(self, commit=True):
user = super(UserCreationForm, self).save(commit=False)
user.set_password(self.cleaned_data['password2'])
@ -62,6 +63,7 @@ class UserForm(forms.ModelForm):
title = forms.CharField(widget=forms.TextInput(attrs={'style':'width: 550px'}), required=False)
descriptions = forms.CharField(widget=forms.TextInput(attrs={'style':'width: 550px'}), required=False)
keywords = forms.CharField(widget=forms.TextInput(attrs={'style':'width: 550px'}), required=False)
class Meta:
model = User
exclude = ('last_login', 'password', 'is_active', 'is_admin', 'is_superuser', 'is_staff'
@ -98,4 +100,4 @@ class UserForm(forms.ModelForm):
class TranslatorForm(forms.ModelForm):
class Meta:
model = TranslatorProfile
exclude = ('user')
exclude = ('user')

@ -1,9 +1,13 @@
# -*- coding: utf-8 -*-
from django.db import models
from hvad.models import TranslatableModel, TranslatedFields
from django.contrib.auth.models import BaseUserManager, AbstractBaseUser, PermissionsMixin
from django.core.mail import send_mail
from django.utils import timezone
from django.db.models.signals import post_save
#custom functions
from functions.custom_fields import LocationField
from functions.form_check import translit_with_separator
"""
from django.contrib.auth.hashers import check_password
from hashlib import md5
@ -49,6 +53,7 @@ class UserManager(BaseUserManager):
return user
class User(AbstractBaseUser, PermissionsMixin):
"""
Implementing a fully featured User model with
@ -56,6 +61,8 @@ class User(AbstractBaseUser, PermissionsMixin):
Email, first name, last name and password are required. Other fields are optional.
"""
email = models.EmailField(
verbose_name = 'Электронная почта',
max_length = 255,
@ -64,11 +71,15 @@ class User(AbstractBaseUser, PermissionsMixin):
)
first_name = models.CharField(verbose_name='Имя', max_length=255)
last_name = models.CharField(verbose_name='Фамилия', max_length=255)
url = models.SlugField(blank=True)
#
is_active = models.BooleanField(default=1) # СДЕЛАТЬ проверку на емейле
is_staff = models.BooleanField(default=0)
is_admin = models.BooleanField(default=0)
is_translator = models.BooleanField(verbose_name='Переводчик', default=0)
is_organiser = models.BooleanField(verbose_name='Организатор', default=0)
date_joined = models.DateTimeField(auto_now_add=True)
date_registered = models.DateTimeField(blank=True, null=True)#
date_modified = models.DateTimeField(auto_now=True)
@ -76,10 +87,8 @@ class User(AbstractBaseUser, PermissionsMixin):
country = models.ForeignKey('country.Country', verbose_name='Страна', blank=True, null=True, related_name='users')
city = models.ForeignKey('city.City', verbose_name='Город', blank=True, null=True)
company = models.ForeignKey('company.Company', blank=True, null=True)
organiser = models.ForeignKey('organiser.Organiser', blank=True, null=True)
#other user information
phone = models.PositiveIntegerField(verbose_name='Телефон', blank=True, null=True)
url = models.CharField(verbose_name='URL', max_length=255, blank=True)
position = models.CharField(verbose_name='Должность', max_length=255, blank=True)
about = models.TextField(verbose_name='О себе', blank=True)
avatar = models.ImageField(verbose_name='Фото', upload_to='/accounts/avatar/', blank=True)
@ -101,6 +110,14 @@ class User(AbstractBaseUser, PermissionsMixin):
"""
return u'%s %s'%(self.first_name, self.last_name)
def set_url(self, st):
"""
"""
self.url = translit_with_separator(u'%s'%st)
def __unicode__(self):
return self.email
@ -120,40 +137,10 @@ class User(AbstractBaseUser, PermissionsMixin):
def has_module_perms(self, app_label):
return True
"""
class MyUserAuthBackend(object):
def check_md5_password(self, db_password, supplied_password):
return md5(supplied_password).hex_digest(), db_password
def authenticate(self, username=None, password=None, **kwargs):
# Authenticate a user based on email address as the user name.
UserModel = get_user_model()
if username is None:
username = kwargs.get(UserModel.USERNAME_FIELD)
try:
user = UserModel._default_manager.get_by_natural_key(username)
if check_password(password, user.password):
# user.set_password(password)
# user.save()
return user
#if user.check_password(password):
# return user
except UserModel.DoesNotExist:
return None
def get_user(self, user_id):
try:
UserModel = get_user_model()
return UserModel._default_manager.get(pk=user_id)
except UserModel.DoesNotExist:
return None
"""
class TranslatorProfile(models.Model):
"""
Extra information about tranlators
Extra information about translators
"""
#required field, relation with user model
user = models.ForeignKey(User, related_name='translator')
@ -185,4 +172,36 @@ def create_translator_profile(sender, **kw):
except: pass
post_save.connect(create_translator_profile, sender=User)
post_save.connect(create_translator_profile, sender=User)
"""
class MyUserAuthBackend(object):
def check_md5_password(self, db_password, supplied_password):
return md5(supplied_password).hex_digest(), db_password
def authenticate(self, username=None, password=None, **kwargs):
# Authenticate a user based on email address as the user name.
UserModel = get_user_model()
if username is None:
username = kwargs.get(UserModel.USERNAME_FIELD)
try:
user = UserModel._default_manager.get_by_natural_key(username)
if check_password(password, user.password):
# user.set_password(password)
# user.save()
return user
#if user.check_password(password):
# return user
except UserModel.DoesNotExist:
return None
def get_user(self, user_id):
try:
UserModel = get_user_model()
return UserModel._default_manager.get(pk=user_id)
except UserModel.DoesNotExist:
return None
"""

@ -19,6 +19,8 @@ def translit_with_separator(string, separator='-'):
usage: translit_with_separator('введите, слово', '_') return 'vvedite_slovo'
string must be unicode
"""
#make string translit

@ -1,17 +1,23 @@
# -*- coding: utf-8 -*-
from django.db import models
from hvad.models import TranslatableModel, TranslatedFields
from accounts.models import User
from django.db.models.signals import post_save
#custom functions
from functions.custom_fields import LocationField
from functions.form_check import translit_with_separator
class Organiser(TranslatableModel):
"""
Create Company model
Create Organiser model
Uses hvad.TranslatableModel which is child of django.db.models class
"""
url = models.CharField(verbose_name='URL', max_length=255)
user = models.ForeignKey(User, related_name='organiser')
url = models.SlugField(verbose_name='URL', blank=True)
#relations
country = models.ForeignKey('country.Country', verbose_name='Страна', blank=True, null=True)
city = models.ForeignKey('city.City', verbose_name='Город', blank=True, null=True)
@ -28,24 +34,42 @@ class Organiser(TranslatableModel):
foundation = models.PositiveIntegerField(verbose_name='Год основания', blank=True, null=True)
events_number = models.PositiveIntegerField(verbose_name='Количество мероприятий', blank=True, null=True)
staff_number = models.PositiveIntegerField(verbose_name='Количество сотрудников', blank=True, null=True)
own_place = models.BooleanField(verbose_name='Собственные площадки', default=0)
place = models.ManyToManyField('place_exposition.PlaceExposition', blank=True, null=True,
related_name='organiser_place')
place_exposition = models.ManyToManyField('place_exposition.PlaceExposition', blank=True, null=True,
related_name='organiser_place_exposition')
place_conference = models.ManyToManyField('place_conference.PlaceConference', blank=True, null=True,
related_name='organiser_place_conference')
#translation fields
translations = TranslatedFields(
name = models.CharField(verbose_name='Название', max_length=255),
name = models.CharField(verbose_name='Название', max_length=255, blank=True),
specialization = models.CharField(verbose_name='Специализация', max_length=255, blank=True),
description = models.TextField(verbose_name='Описание', blank=True),
representation = models.TextField(verbose_name='Представительства', blank=True),
address_inf = models.TextField(verbose_name='Доп инф по адресу', blank=True),
#-----meta
title = models.CharField(max_length=255),
descriptions = models.CharField(max_length=255),
keywords = models.CharField(max_length=255),
title = models.CharField(max_length=255, blank=True),
descriptions = models.CharField(max_length=255, blank=True),
keywords = models.CharField(max_length=255, blank=True),
)
#fields saves information about creating and changing model
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
def __unicode__(self):
return self.lazy_translation_getter('name', self.pk)
return self.lazy_translation_getter('name', self.pk)
def create_organiser(sender, **kw):
"""
create Organiser profile if "is_organiser" field in User model true
if it's false delete Organiser profile connected to User
"""
user = kw["instance"]
if user.is_organiser:
organiser = Organiser(user=user)
organiser.save()
else:
try:
Organiser.objects.get(user = user).delete()
except: pass
post_save.connect(create_organiser, sender=User)

Loading…
Cancel
Save