2010-06-13 2 views
0

У меня есть этот класс в моей модели:Получить значение выбранного поля из выпадающего списка

class ServiceCharge(models.Model): 
    name = models.CharField(max_length=30) 
    amount = models.PositiveIntegerField() 
    extends_membership = models.BooleanField(default=False) 

    def __unicode__(self): 
    return str(self.name) 

То, что я хочу иметь в форме для зарядки пользователей платы за обслуживание, когда заряд выбран из выпадающее меню, два значения для amount и extends_membership обновляются по форме в зависимости от выбранного заряда.

Мой forms.py:

class vModelChoiceField(forms.ModelChoiceField): 
    def label_from_instance(self, obj): 
    return "%s" % obj.name 

class PayServiceChargeForm(PaymentsForm): 
    service_charge = vModelChoiceField(queryset=ServiceCharge.objects.all(), 
     empty_label="  ") 

    class Meta(PaymentsForm.Meta): 
     exclude = ('member', 'payment_type', 'transacted_by', 'description') 

Затем шаблон формы:

<table border="0"> 
    <tr> 
    <td><strong>{% trans "Service Charge" %}</strong></td> 
    <td>{{ form.service_charge }}</td> 
    <td><strong>{% trans "Extends Membership" %}</strong></td> 
    <td>{{ form.extends_membership }}</td> 
    </tr> 
    <tr> 
    <td valign="top"><strong>{% trans "Expiry Date" %}</strong></td> 
    <td valign="top">{{ form.expiry_date }}</td> 
    <td valign="top"><strong>{% trans "Amount" %}</strong></td> 
    <td>{{ form.amount }}</td> 
    </tr> 
</table> 

Я испытывал некоторые JQuery, но я застрял после получения выбранного заряда:

<script type="text/javascript"> 
$(document).ready(function(){ 
    $("#id_service_charge").change(onSelectChange); 
}); 

function onSelectChange(){ 
    var selected = $("#id_service_charge option:selected");  
    var output = ""; 
    if(selected.val() != 0){ 
     charge = selected.val(); 
     .... (update values) .... 
    } 
} 
</script> 
+0

Вы ищете серверную помощь или помощь на стороне клиента? Если вам нужна помощь на стороне клиента, отправьте клиентский код. – user113716

ответ

1

Я бы сделал это, сделав вызов AJAX серверу на сумму и расширенное_частничество, связанные с выбранным сбором и затем обновить html-поля с извлеченными данными.

Для этого вам нужно добавить что-то вроде этого, чтобы onSelectChange()

$.post(URL_TO_YOUR_VIEW, {charge: charge}, function(data) { 
    //here you can use jquery to insert values to the html like this: 
    $('#id_ammount').val(data.ammount); 
    //also update extended membership you can sth like this: 
    if(data.extended_membership) 
    { 
     $('#id_extended_membership').attr('checked', 'checked'); 
    } 
    else 
    { 
     $('#id_extended_membership').removeAttr('checked'); 
    } 
}, "json"); 

На стороне сервера вам нужно добавить представление для обработки Ajax вызова. Это может выглядеть примерно так:

def magic_view_name(request): 
    if request.is_ajax() and request.method == 'POST': 
     charge = request.POST['charge'] 
     ammount = #get ammount somehow 
     extended_memebership = #get ext. memebership somehow 
     data = simplejson.dumps({'ammount': ammount, 
           'extended_membership': extended_membership}, 
           encoding="utf-8", 
           ensure_ascii=False) 
     return HttpResponse(data, mimetype="application/javascript") 

    return HttpResponse(u'No data for you') 

Вам нужно добавить надлежащий шаблон URL-адрес для вашего urls.py и что должно работать.

Надеюсь, это поможет вам.

Кстати, я полагаю, что вы не хотите, чтобы пользователи меняли цену на выбранную службу ServiceCharge. Если это так, вы можете показать их как значения readonly, а не как редактируемые поля формы.

+0

@Dzida .... thnx ... это именно то, что я хотел :) Я немного новичок в этом материале AJAX, поэтому, я думаю, это то, где я застрял. – Stephen

+0

Прохладный. Рад, что я могу вам помочь. AJAX с jquery и django довольно прост. Код, который я разместил здесь (с незначительными изменениями), обычно покрывает большинство моих потребностей. Если вы новичок в jquery и ajax, посмотрите здесь: http://api.jquery.com/category/ajax/. .load() также очень полезна – dzida

Смежные вопросы