fix bug with selects

remotes/origin/1203
Nazar Kotjuk 12 years ago
parent 64d873a167
commit 954178c4b1
  1. 4
      proj/settings.py
  2. 52
      proj/views.py
  3. 60
      static/custom_js/select_tag.js

@ -129,13 +129,13 @@ TEMPLATE_LOADERS = (
) )
MIDDLEWARE_CLASSES = ( MIDDLEWARE_CLASSES = (
'django.middleware.cache.UpdateCacheMiddleware', # 'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware', 'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware', 'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware', # 'django.middleware.cache.FetchFromCacheMiddleware',
# Uncomment the next line for simple clickjacking protection: # Uncomment the next line for simple clickjacking protection:
# 'django.middleware.clickjacking.XFrameOptionsMiddleware', # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
#'debug_toolbar.middleware.DebugToolbarMiddleware',#должно быть последним полем #'debug_toolbar.middleware.DebugToolbarMiddleware',#должно быть последним полем

@ -45,23 +45,40 @@ def settings(request):
from directories.models import Currency from directories.models import Currency
from country.models import Country
from country.forms import CountryForm
from file.forms import FileModelForm
from django.views.decorators.cache import cache_page from django.views.decorators.cache import cache_page
from django.core.cache import cache #from django.core.cache import cache
#@cache_page(30) #@cache_page(30)
def test(request): def test(request):
ids = [i for i in range(1, 5000)] ids = [i for i in range(1, 5000)]
form = CountryForm()
file_form = FileModelForm
c = Country.objects.get(id=5)
country_id = getattr(c, 'id')
#args = {}
for i in range(1,10000):
args = {'languages': LANGUAGES, 'form': form, 'file_form': file_form, 'obj_id': country_id, 'files':FileModel.objects.filter(content_type=ContentType.objects.get_for_model(c), object_id=getattr(c, 'id'))}
#args['languages'] = LANGUAGES
#args['form'] = form
#args['file_form'] = file_form
#args['files'] = FileModel.objects.filter(content_type=ContentType.objects.get_for_model(c), object_id=getattr(c, 'id'))
#args['obj_id'] = country_id
currs = [item for item in Currency.objects.all()]
currs = []
for i in ids:
currs.append(Currency.objects.get(id=i))
cache.set('key', currs[100].currency, 60) #currs = [item for item in Currency.objects.all()]
#currs = []
#for i in ids:
# currs.append(Currency.objects.get(id=i))
return HttpResponse('success') #cache.set('key', currs[100].currency, 60)
return HttpResponse(args)
@ -77,15 +94,20 @@ def ajax_city(request):
def ajax_tag(request): def ajax_tag(request):
""" """
returns html <option> tags filled with tags filtered by theme values from request return array of tags (id, name) filtered by theme values from request
""" """
try: if request.GET:
data = request.GET['id'].replace('theme=', '').split('&') ids = request.GET.get('id')
objects = Tag.objects.filter(theme__in=data) if ids:
return render_to_response('select.html', {'objects': objects}) #get id values in list
except: data = ids.replace('theme=', '').split('&')
return HttpResponse('error') #generate list of tags
tags = ['[%d, "%s"]'%(int(item.id), item.name) for item in Tag.objects.filter(theme__in=data)]
return HttpResponse('[%s]'%', '.join(tags), content_type='application/json')
else:
#request empty - send empty array
return HttpResponse('[]', content_type='application/json')
from django.core import serializers from django.core import serializers
@ -108,7 +130,7 @@ def ajax_post_file(request, obj_id=None):
#initial model object #initial model object
obj = Model.objects.get(id=obj_id) obj = Model.objects.get(id=obj_id)
file = file_form.save(request.FILES, obj) file = file_form.save(request.FILES, obj)
data = serializers.serialize('json', [file]) #data = serializers.serialize('json', [file])
#return HttpResponse(data) #return HttpResponse(data)
files = FileModel.objects.filter(content_type=ContentType.objects.get_for_model(obj),object_id=getattr(obj, 'id')) files = FileModel.objects.filter(content_type=ContentType.objects.get_for_model(obj),object_id=getattr(obj, 'id'))
else: else:

@ -1,15 +1,51 @@
$(document).ready(function(){ $(document).ready(function(){
$('#id_theme').change(function(){ $('#id_theme').change(function(){
$.get( $.get(
"/admin/ajax_tag/", {'id': $(this).serialize()}, function(j){ "/admin/ajax_tag/", {'id': $(this).serialize()}, function(data){
if (j!='error'){ var optionValues = [];
$('#id_tag').html(j); var getValues = [];
$('#id_tag').attr('disabled', false); var selectedValues = []
} //push values sended from server in array
else { $.each(data, function(i, elem){
//delete all options getValues.push(elem[0].toString())
$('#id_tag').find('option').remove(); });
} //delete options if they aren't in getvalues
}); //otherwise push it in array
}); //also push in array already selected values
}); $('#id_tag option').each(function() {
var check = $.inArray($(this), getValues);
if ($(this).is(':selected') ){
selectedValues.push($(this).val())
}
if (check == -1){
$(this).remove()
}
else{
optionValues.push($(this).val());
}
});
//generate new options
//old options unchanged
var html = ''
$.each(data, function(i, elem){
var check = $.inArray(elem[0].toString(), optionValues);
if (check == -1){
html += '<option value="';
html += elem[0];
html += '">';
html += elem[1];
html += '</option>';
}
});
$('#id_tag').append(html);
//select previous selected values
$('#id_tag option').each(function() {
var check = $.inArray($(this).val(), selectedValues)
if (check != -1){
$(this).attr('selected', 'selected');
}
});
});//end get
});//end change
});//end ready
Loading…
Cancel
Save