表单字段取决于另一个字段值

时间:2016-05-17 08:53:59

标签: django

# example objects:
# free
# paid
class ItemType(models.Model):
    name = models.CharField(...)


class Item(forms.ModelForm):
    title = models.CharField(...)
    item_type = models.ForeignKey(ItemType)
    destination_free = models.CharField(...)
    destination_paid = models.CharField(...)

如何根据destination_free值显示destination_paiditem_type字段?因此,如果item_type是免费的,我的表单应显示destination_free,但如果item_type已付款,我的表单应显示destination_paid字段。

1 个答案:

答案 0 :(得分:3)

由于我不知道你的整个代码,这只是客户端的基本逻辑。如果需要,您可以更改值:

  $('#id_destination_free').hide(); // destination_free field
  $('#id_destination_paid').hide(); // destination_paid field

  $('#id_item_type').on('change', function(){
    var optionSelected = $("option:selected", this);
    var valueSelected = this.value;
    if (valueSelected == 'something') {
      $('#id_destination_paid').hide();
      $('#id_destination_free').show();
    } else if (valueSelected == 'anotherthing') {
      $('#id_destination_free').hide();
      $('#id_destination_paid').show();
    }
    return false;
  });

由于您希望item_type个对象作为表单中的选择框,因此可能是ModelForm

class ItemForm(forms.ModelForm):
    class Meta:
        model = Item

    def __init__(self, *args, **kwargs):
        super(ItemForm, self).__init__(*args, **kwargs)
        self.fields['item_type'] = forms.ModelChoiceField(queryset=ItemType.objects.all())

你可以在html文件中渲染它,如:

{{ form.as_p }}