This post is deprecated as its based on Django 1.6 mostly.
I am going to share some useful Django tools/functions which are very useful(were for me atleast) to get things done.
This method will return any model class if you have the name of the class.
from django.db import models def get_model_description(model_name=None, return_property_list=True): for item in models.get_models(include_auto_created=True): if item.__name__ == model_name: if return_property_list is True: return item.get_trigger_properties() else: return item return 
For usage, let us think of an example. Let us think, we have a class name ‘X’, we will get the class instance using it like this:
from usefultools import get_model_descriptor model_x = get_model_descriptor(model_name='X') #will get class model_x_objects = get_model_descriptor(model_name='X').objects.all() #will get all the objects of this class
And for its property:
from usefultools import get_model_descriptor model_x = get_model_descriptor(model_name='X', return_property_list=True) #will get a list of properties like ['a_property','b_property']
If you input latitude and longitude of two places, this function will return the distance in between them. Got help from here: http://code.activestate.com/recipes/576779-calculating-distance-between-two-geographic-points/
import math def distance_calculator(lat1, long1, lat2, long2): lat1, long1, lat2, long2 = float(lat1), float(long1), float(lat2), float(long2) degrees_to_radians = math.pi/180.0 phi1 = (90.0 - lat1)*degrees_to_radians phi2 = (90.0 - lat2)*degrees_to_radians theta1 = long1*degrees_to_radians theta2 = long2*degrees_to_radians cos = (math.sin(phi1)*math.sin(phi2)*math.cos(theta1 - theta2) + math.cos(phi1)*math.cos(phi2)) arc = math.acos( cos ) distance = arc*6378.1 return distance
It will return the distance in KM.
Suppose we have a sentence like:
'5 is greater than 9' and check if its true. We could use
eval to dynamically converty string to python but its highly not recommended. So I tried like this:
def calculate_relational_operation(lhs, rhs, operator): get_type = type(lhs).__name__ if get_type == 'str': rhs = str(rhs) elif get_type == 'float': rhs = float(rhs) elif get_type == 'int': rhs = int(rhs) if operator == "==": if lhs == rhs: return True return False elif operator == "!=": if lhs != rhs: return True return False elif operator == ">": if lhs > rhs: return True return False elif operator == "<": if lhs < rhs: return True return False elif operator == ">=": if lhs >= rhs: return True return False elif operator == "<=": if lhs == rhs: return True return False elif operator == "Is": if lhs is rhs: return True return False return False
It will return True or False depending on the statement/input.
It will return all the weeks list from last 1 year (extendable).
from isoweek import Week def generate_week(): max_week = datetime.datetime.combine(Week.thisweek().thursday(), datetime.time(0,0)) min_week = max_week - datetime.timedelta(days=365) _weeks = list() while True: _weeks.append('Week'+str(max_week.isocalendar())+ ' ' +str(max_week.isocalendar()))) max_week -= datetime.timedelta(days=7) if max_week <= min_week: break return _weeks #Output>> ['Week2 2015', 'Week1 2015', 'Week52 2014' ....]
It will return last 12 month’s year and month number. Constructed using this Stack Overflow answer.
x = 12 now = time.localtime() print([time.localtime(time.mktime((now.tm_year, now.tm_mon - n, 1, 0, 0, 0, 0, 0, 0)))[:2] for n in range(x)]) #Output>> [(2015, 2), (2015, 1), (2014, 12), (2014, 11), (2014, 10), (2014, 9), (2014, 8), (2014, 7), (2014, 6), (2014, 5), (2014, 4), (2014, 3)]
Thats it. Thanks for reading.
If you like this article, you can buy me a coffee. Thanks!
Last updated: Nov 20, 2023