Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Добавление данных из базы в списки формы [RSS Feed]

#1 Дек. 28, 2011 03:31:30

Evgen_irk
От: Иркутск
Зарегистрирован: 2009-02-02
Сообщения: 45
Репутация: +  4  -
Профиль   Отправить e-mail  

Добавление данных из базы в списки формы

Здравствуйте!
Мне нужно добавить данные из БД в списки формы. Сейчас значений немного и код работает:

# -*- coding: utf-8 -*-

from django import forms
from .models import City

class OrderForm(forms.Form):
cities = City.objects.all()
list_cities = [(i, i) for i in cities]

src_city = forms.ChoiceField(label='Город отправки:', widget=forms.Select, choices=list_cities)
dest_city = forms.ChoiceField(label='Город приема:', widget=forms.Select, choices=list_cities)
Подскажите, как сделать, чтобы при выборе ключевой буквы в поля со списками добавлялись города на эту букву? Возможно, у кого-нибудь были еще решения подобной задачи?
# -*- coding: utf-8 -*-

from django import forms
from .models import City

class OrderForm(forms.Form):
list_keys = [('А', 'А'), ('Б', 'Б'), ('В', 'В'), ('Г', 'Г')] # и т.д.
# обработчик для формирования list_cities и list_cities2
src_key = forms.ChoiceField(label='Адресат начинается на:', widget=forms.Select, choices=list_keys)
src_city = forms.ChoiceField(label='Город отправки:', widget=forms.Select, choices=list_cities)
dest_key = forms.ChoiceField(label='Получатель начинается на:', widget=forms.Select, choices=list_keys)
dest_city = forms.ChoiceField(label='Город приема:', widget=forms.Select, choices=list_cities2)



wxPython

Офлайн

#2 Дек. 28, 2011 12:44:07

magnet85
От:
Зарегистрирован: 2009-04-13
Сообщения: 91
Репутация: +  2  -
Профиль   Отправить e-mail  

Добавление данных из базы в списки формы

Ну лучше всего это сделать с помощью jQuery, вещайте обработчик на изменение src_key и dest_key, затем скрываете все лишние options в src_city, dest_city



Офлайн

#3 Дек. 29, 2011 03:42:33

Evgen_irk
От: Иркутск
Зарегистрирован: 2009-02-02
Сообщения: 45
Репутация: +  4  -
Профиль   Отправить e-mail  

Добавление данных из базы в списки формы

magnet85, можно привести пример как это сделать?



wxPython

Офлайн

#4 Дек. 30, 2011 19:07:27

magnet85
От:
Зарегистрирован: 2009-04-13
Сообщения: 91
Репутация: +  2  -
Профиль   Отправить e-mail  

Добавление данных из базы в списки формы

Сейчас посмотрел, во многих браузерах со скрытием опций из селекта есть проблемы(IE, Chrome, Safari), есть решение, проверил его в firefox 9 и chromium 15

     <script type="text/javascript">
$(document).ready(function() {
$.fn.hideOptionGroup = function() {
$(this).hide();
$(this).children().each(function(){
$(this).attr("disabled", "disabled").removeAttr("selected");
});
$(this).appendTo($(this).parent());

}

$.fn.showOptionGroup = function() {
$(this).show();
$(this).children().each(function(){
$(this).removeAttr("disabled" );
});
$(this).prependTo($(this).parent());
$(this).parent().animate({scrollTop:0},0);
}

var symbol = $('select[name=src_key]').val();

$('select[name=src_city] option:not([value^=' + symbol + '])').hideOptionGroup();

$('select[name=src_key]').change(function() {
symbol = $(this).val();
$('select[name=src_city] option').showOptionGroup();
$('select[name=src_city] option[value^=' + symbol +']:first').attr('selected', 'selected');
$('select[name=src_city] option:not([value^=' + symbol + '])').hideOptionGroup();
});
});
</script>
это пример для первых двух полей, для вторых сделайте по аналогии.



Офлайн

#5 Дек. 31, 2011 01:15:38

pill
От:
Зарегистрирован: 2010-08-27
Сообщения: 223
Репутация: +  0  -
Профиль   Отправить e-mail  

Добавление данных из базы в списки формы

Офлайн

#6 Фев. 8, 2012 03:42:29

Evgen_irk
От: Иркутск
Зарегистрирован: 2009-02-02
Сообщения: 45
Репутация: +  4  -
Профиль   Отправить e-mail  

Добавление данных из базы в списки формы

А если сделать сначала пустые списки формы:

# -*- coding: utf-8 -*-

from django import forms

class OrderForm(forms.Form):
list_cities = []

src_city = forms.ChoiceField(label='Город отправки:', widget=forms.Select, choices=list_cities)
dest_city = forms.ChoiceField(label='Город приема:', widget=forms.Select, choices=list_cities)
Можно ли после создания формы добавить значения к ней и как это сделать?



wxPython

Офлайн

#7 Фев. 8, 2012 05:51:37

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Добавление данных из базы в списки формы

Evgen_irk
А если сделать сначала пустые списки формы:
# -*- coding: utf-8 -*-

from django import forms

class OrderForm(forms.Form):
list_cities = []

src_city = forms.ChoiceField(label='Город отправки:', widget=forms.Select, choices=list_cities)
dest_city = forms.ChoiceField(label='Город приема:', widget=forms.Select, choices=list_cities)
Можно ли после создания формы добавить значения к ней и как это сделать?
Я делаю так:
class MicroTerritoryForm(ModelForm):
def __init__(self, *args, **kwargs):
school_id=kwargs.pop('school_id')
super(MicroTerritoryForm, self).__init__(*args, **kwargs)

school=School.objects.get(pk=school_id)

streets=MicroTerritoryStreets.objects.filter(school=school).exclude(all_houses=True)

self.fields['street'].queryset=street.order_by('name')

def cleaned_data(self,*args, **kwargs):
super(MicroTerritoryForm, self).cleaned_data(*args, **kwargs)


class Meta:
model=MicroTerritory
exclude=('school',)
Надеюсь мысль ясна, в конструкторе формы определить кверисет для поля со списком, с какими-то значениями по умолчанию, а потом джаваскриптом подтянуть необходимые юзеру данные

$('#id_place').change(function()
{
$.getJSON("/kladr_street_get", {'territory':$(this).val()} , function(data){
list=''

for (i=0; i<data.data.length; i++)
{
list+="<option value="+data.data[i].id+">"+data.data[i].val+"</option>"

}

$(".street_select").html(list)

})
}

);
@login_required
def kladr_street_get(request):

kladr_id=request.GET['territory']

if not kladr_id:
return HttpResponse(simplejson.dumps({}), mimetype="application/json")
code=Kladr.objects.get(id=kladr_id).code
streets=Streets.objects.filter(code__startswith=(str(code))[:11]).order_by('name')


data=[{'id':s.id, 'val': u'%s, %s' %( s.name, s.socr)} for s in streets]


data={'data':data}

return HttpResponse(simplejson.dumps(data), mimetype="application/json")



Офлайн

  • Начало
  • » Django
  • » Добавление данных из базы в списки формы[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version