.first() would allow replacing this entire function with one line, but it's only Django 1.6:

return self.bands.filter(upper_limit__gte=weight).order_by('upper_limit').first()