def save(self, commit=True): user = super(RegistrationForm, self).save(commit=False) user.username = User.make_unique_username(self.cleaned_data['email']) user.set_password(self.cleaned_data['password1']) if commit: user.save() return user
def realtors(request): title = _(u'Риелторы агентства') agency = request.own_agency if not agency: raise Http404 # клик по кнопке "Показать статистику" if 'show-stats' in request.GET: return HttpResponseRedirect( reverse('agency_admin:stats') + '?%s' % urllib.urlencode({'realtor': request.GET.getlist('realtor')}, True) ) if request.method == 'POST': add_form = AddRealtorForm(request.POST, request.FILES, agency=agency) if add_form.is_valid(): with db_transaction.atomic(): agency_realtor = Realtor.objects.filter( is_admin=True, user=request.user).get() try: user = User.objects.get( email__iexact=add_form.cleaned_data['email']) except User.DoesNotExist: user = add_form.save(commit=False) user.username = User.make_unique_username( add_form.cleaned_data['email']) password = ''.join( random.choice(string.digits) for i in xrange(8)) user.set_password(password) user.save() phone, created = Phone.objects.get_or_create( number=add_form.cleaned_data['phone']) UserPhone(user=user, phone=phone, order=1).save() else: password = None new_realtor = Realtor(agency=agency_realtor.agency, user=user, is_active=False, confirmation_key=uuid.uuid4().hex) new_realtor.save() new_realtor.send_mail(password) new_realtor.send_message() add_form = AddRealtorForm(agency=agency) messages.info( request, _(u'Рилетор добавлен.<br/>Риелтору отправлено личное сообщений с ссылкой для подтверждения' ), extra_tags='modal-dialog-w400 modal-success') return HttpResponseRedirect(reverse('agency_admin:realtors')) else: add_form.set_required() else: add_form = AddRealtorForm(agency=agency) add_form.set_required() # удаляем неугодных if 'delete' in request.GET: agency.realtors.filter(pk=request.GET['delete']).delete() # риелторы агентства realtors = agency.realtors.prefetch_related('user__phones').order_by( '-is_admin', 'pk') form = RieltorFilterForm(request.GET) if form.is_valid(): if form.cleaned_data['search']: q = form.cleaned_data['search'] search_filter = Q(user__first_name__icontains=q) | Q( user__last_name__icontains=q) | Q(user__email__icontains=q) realtors = realtors.filter(search_filter) paginator = HandyPaginator(realtors, 5, request=request) # статистика просмотров и входов for i, realtor in enumerate(paginator.current_page.object_list): try: paginator.current_page.object_list[i].stats = Stat.objects.filter(user=realtor.user).order_by().values('user')\ .annotate(ad_views=Sum('ad_views'), ad_contacts_views=Sum('ad_contacts_views'), entrances=Sum('entrances'))[0] except IndexError: paginator.current_page.object_list[i].stats = None return render(request, 'agency/realtors.jinja.html', locals())