Skip to content

Instantly share code, notes, and snippets.

View mpwoodward's full-sized avatar

Matt Woodward mpwoodward

View GitHub Profile
@mpwoodward
mpwoodward / models.py
Last active December 14, 2015 00:49
Python model class with various approval dates to illustrate transient properties and sorting
class UserRequest(models.Model):
REQUEST_IMPACT = (
('minor', 'Minor'),
('major', 'Major'),
('severe', 'Wake the President'),
)
name = models.CharField(max_length=200)
request_impact = models.CharField(max_length=10, choices=REQUEST_IMPACT)
datetime_supervisor_approved = models.DateTimeField(blank=True, null=True)
@mpwoodward
mpwoodward / models.py
Created February 21, 2013 04:36
Python model class with transient property - version 2
class UserRequest(models.Model):
REQUEST_IMPACT = (
('minor', 'Minor'),
('major', 'Major'),
('severe', 'Wake the President'),
)
name = models.CharField(max_length=200)
request_impact = models.CharField(max_length=10, choices=REQUEST_IMPACT)
datetime_supervisor_approved = models.DateTimeField(blank=True, null=True)
@mpwoodward
mpwoodward / views.py
Created February 21, 2013 04:47
View function using Python sorted() to sort a Django QuerySet based on a transient property on the model class
def user_request_calendar(request):
# there's actually some filtering happening but we'll use all() for brevity
user_requests = UserRequest.objects.all()
user_requests = sorted(user_requests, key=lambda ur: (ur.calendar_date, ur.request_impact))
# rest of view function and return here ...
@mpwoodward
mpwoodward / models.py
Created July 1, 2013 23:31
Registrant and Sponsor models for Old Dog Haven charity walk registration site
class Registrant(models.Model):
first_name = models.CharField(max_length=50, verbose_name='First Name')
last_name = models.CharField(max_length=50, verbose_name='Last Name')
email = models.EmailField(max_length=100, unique=True, verbose_name='Email')
password = models.CharField(max_length=100, verbose_name='Password')
phone = models.CharField(max_length=20, verbose_name='Phone')
address1 = models.CharField(max_length=100, verbose_name='Address')
address2 = models.CharField(max_length=100, blank=True, null=True, verbose_name='Address (cont.)')
city = models.CharField(max_length=100, verbose_name='City')
state = models.CharField(max_length=100, verbose_name='State/Province')
@mpwoodward
mpwoodward / models.py
Created July 1, 2013 23:47
SponsorManager model for Old Dog Haven charity walk registration site. Example of extending the default Django model manager as well as running a SQL query directly.
class SponsorManager(models.Manager):
def with_sponsorship_totals(self):
from django.db import connection
cursor = connection.cursor()
cursor.execute("""
SELECT s.id,
s.registrant_sponsoring_id,
SUM(s.sponsorship_amount) AS total_sponsorship_amount,
r.first_name,
@mpwoodward
mpwoodward / views.py
Last active December 19, 2015 17:28
Example of writing CSV data to the Django HTTP Response object
import csv
from django.http import HttpResponse
# other imports here ...
@login_required
def registrant_email_dump(request):
response = HttpResponse(content_type='text/csv')
@mpwoodward
mpwoodward / new_form_function.js
Created February 26, 2015 00:32
Grabbing a new Django form for a formset via Ajax
function addLeaveRow() {
var totalFormsField = $('#id_form-TOTAL_FORMS');
var nextFormNum = parseInt(totalFormsField.val());
$('#add_leave_row').addClass('disabled');
$('#loading').show();
$.ajax({
url: '/leave/leave-form/' + nextFormNum + '/',
type: 'GET'
@mpwoodward
mpwoodward / form.html
Created February 26, 2015 00:42
Snippet of Django form used in formset that is called via Ajax
<div id="leaveForm{{ form_num }}" class="row row-tall row-bottom-border leaveForm">
<div class="form-group col-sm-4">
<div class="row">
<div class="col-xs-8">
<label for="id_form-{{ form_num }}-date_start" class="sr-only">From</label>
<div class="input-group{% if leave_form.date_start.errors %} has-error{% endif %}">
<span class="input-group-addon addon-small hidden-sm"><i class="fa fa-calendar"></i></span>
<input id="id_form-{{ form_num }}-date_start" name="form-{{ form_num }}-date_start" class="datepicker form-control input-sm leaveFormInput" placeholder="mm/dd/yyyy" type="text" value="{{ leave_form.date_start.value|default_if_none:'' }}" />
{% if leave_form.date_start.errors %}
<span class="input-group-addon addon-small">
@mpwoodward
mpwoodward / delete_row.html
Created February 26, 2015 01:09
Example of delete row link
<a href="javascript:void(0);" onclick="deleteLeaveRow(this);" class="remove muted pull-right">
<div class="fa fa-times fa-lg" title="Delete day off" alt="Delete day off"></div><span class="visible-xs">Remove Day</span>
</a>
@mpwoodward
mpwoodward / delete_leave_row.js
Created February 26, 2015 01:12
Delete leave row function
function deleteLeaveRow(deleteLink) {
var totalFormsField = $('#id_form-TOTAL_FORMS');
var totalForms = parseInt(totalFormsField.val()) - 1;
totalFormsField.val(totalForms);
$(deleteLink).closest('.leaveForm').remove();
// for formset functionality to work properly, need to update all existing form ids so they're sequential
updateFormElementIndices('leaveForm');