Получить значение выбранного поля из выпадающего списка - PullRequest
0 голосов
/ 13 июня 2010

У меня есть этот класс в моей модели:

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 обновляются в форме в зависимости от выбранного заряда.

Мои формы.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>

1 Ответ

1 голос
/ 13 июня 2010

Я бы сделал это, сделав AJAX-запрос к серверу для определения суммы и extended_membership, связанной с выбранным платежом, а затем обновил бы 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.Если это так, вы можете показывать их как значения только для чтения, а не как редактируемые поля формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...