- Author:
- sergejdergatsjev
- Posted:
- November 25, 2008
- Language:
- JavaScript
- Version:
- Not specified
- Score:
- 0 (after 0 ratings)
Save a filter in admin app
Example:
http://localhost:8000/admin/org/registrationprofile/?title__exact=Dr&ot=asc&o=4&speciality__exact=gynaecology
you can save this path org/registrationprofile/?title__exact=Dr&ot=asc&o=4&speciality__exact=gynaecology
as your filter with name like "DrGynecologySortedCyty" and then select this filter from selectbox
include JavaScript file FilterManager.js and jQuery in all admin templates.
=== Install ===
1. Add this in header of base.html for contrib.admin
You can download this files from
http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6.min.js
- Change path for your model that you will save in javaScript file FilterManager.js
Example: /admin/org/registrationprofile/
- Add models and views. see code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | var FilterManager = window.FilterManager || {};
FilterManager.createElement = function(parent){
template = "<div class=\"filter\" id=\"filter\"><fieldset><legend>Select filter</legend><select id=\"select" +
"\"></select><br/><a class=\"addlink\" id=\"button" +
"\">SAVE NEW FILTER</a> <span id=\"out" +
"\"></span></fieldset></div>";
$(template).appendTo(parent);
$("#select").load("/filter/options/ #options option");
}
FilterManager.attachEvents = function(){
$("#button").bind("click", function(e){
var currentFilter = window.location.pathname + window.location.search;
//var filterName = window.prompt("Filter name pleas...", "New filter name");
var options = {"modal":"true" , overlay: {
opacity: 0.5,
background: "black"
},
buttons: {
"Ok": function() {
var filterName = $("#filtername").attr("value");
$.post("/filter/add/", { "filter": currentFilter, "name": filterName },
function(data){
$("#out").text(data).fadeOut(7000);
$("select").load("/filter/options/ #options option");
dialog.dialog("close");
});
},
"Cancel": function() {
$(this).dialog("close");
}
}
}
var dialog = $("<div id=\"progress\" class=\"flora\" title=\"New filter\">" +
"<label for=\"filtername\">Filter name pleas...</label>" +
"<br/><input type=\"text\" value=\"New filter name\" id=\"filtername\"/></div>").dialog(options);
$("#filtername").focus(function() {
if ( $(this).val() == "New filter name") $(this).val('');
});
});
var u = document.location;
$("#select").bind("change", function(e){
var url = $("#select").val();
var port = "";
if(u.port != ""){
port = ":" + u.port;
}
window.document.location = u.protocol + "//" + u.hostname + port + url;
});
}
// ********************* usage ******************************
$(document).ready(function() {
//do stuff when DOM is ready jQury
if(document.location.pathname == "/admin/org/registrationprofile/"){
FilterManager.createElement("#toolbar");
FilterManager.attachEvents();
}
});
//******************* in view.py of django app //*****************
@login_required
def filter(request, action=None,
template_name='www/filter.html',
extra_context=None):
data = {}
if extra_context is None:
extra_context = {}
if action == 'options':
data["filters"] = Filter.objects.all()
if action == 'add':
f = FilterForm(request.POST)
f.save()
data["response"] = "Ok, filter: " + request.POST.get("filter") + " with name " + request.POST.get("name") + "is added."
#data["response"] = "Ok, filter: " + request.POST.get("filter") + " with name " + request.POST.get("name") + "is added."
context = RequestContext(request)
for key, value in extra_context.items():
context[key] = callable(value) and value() or value
return render_to_response(template_name, data, context_instance=RequestContext(request))
//*********** in model.py ************************/
class Filter(models.Model):
filter = models.CharField(_('Filter'), max_length=250, primary_key=True)
name = models.CharField(_('Name'), max_length=250, blank=False)
def __unicode__(self):
return u" %(name)s %(filter)s " % {'filter':self.filter,
'name':self.name}
|
More like this
- Django Collapsed Stacked Inlines by applecat 1 year, 9 months ago
- Django Collapsed Stacked Inlines by mkarajohn 3 years, 10 months ago
- Dynamically adding forms to a formset. OOP version. by halfnibble 9 years, 6 months ago
- Convert multiple select for m2m to multiple checkboxes in django admin form by abidibo 11 years, 7 months ago
- Django admin inline ordering - javascript only implementation by ojhilt 11 years, 11 months ago
Comments
Please login first before commenting.