【问题标题】:Django Inlineformset - JQuery Dropdown based on Second DropdownDjango Inlineformset - 基于 Second Dropdown 的 JQuery Dropdown
【发布时间】:2014-10-23 20:10:58
【问题描述】:

我有以下订单表单集。

由于产品下拉列表将包含 100 多种产品,我想根据产品类型选择过滤下拉列表中可用的产品。我一直在尝试使用 JQuery 来解决这个问题,查看网络上的几个解决方案和示例,但我真的被卡住了。

任何有关实现此功能的帮助或指示将不胜感激。

下面有相关的Models/Views/Forms供参考。

模型.py

class OrderHeader(models.Model):
    customer = models.ForeignKey(Customer)
    orderheader_total_price = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True, default=0)

    def __unicode__(self):
        return smart_unicode(self.pk)


class OrderLine(models.Model):
    orderheader = models.ForeignKey(OrderHeader)
    product_type = models.ForeignKey(ProductType)
    product = models.ForeignKey(Product)

    def __unicode__(self):
        return smart_unicode(self.pk)

Views.py

def orderline_formset(request, id=None):
    if id:
        orderid = OrderHeader.objects.get(pk=id)
    else:
        orderid = OrderHeader()

    OrderLineFormSet = inlineformset_factory(OrderHeader, OrderLine, OrderLineForm, extra = 1, can_delete=True)  
    helper = OrderLineFormSetHelper()

    if request.method == 'POST':
        form = OrderHeaderForm(request.POST, instance=orderid)
        formset = OrderLineFormSet(request.POST,instance=orderid)
        if form.is_valid() and formset.is_valid():
            form.save()
            formset.save()
            form = OrderHeaderForm(instance=orderid)
            formset = OrderLineFormSet(instance=orderid)
            messages.success(request, 'Order saved succesfully!')
        else:
            messages.error(request, 'Order save error, please check fields below')
    else:
        form = OrderHeaderForm(instance=orderid)
        formset = OrderLineFormSet(instance=orderid)

    return render_to_response("order-add.html", {'orderform' : form,'formset': formset, 'helper': helper},
                              context_instance=RequestContext(request))

Forms.py

class OrderLineForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(OrderLineForm, self).__init__(*args, **kwargs)

    class Meta:
        model = OrderLine
        fields = ['product_type', 'product','material','orderline_product_price','orderline_quantity',
                  'orderline_total_price']
        labels = {
            'orderline_quantity': ('Quantity'),
            'orderline_product_price': ('Price'),
            'orderline_total_price': ('Total'),
        }

class OrderLineFormSetHelper(FormHelper):
    def __init__(self, *args, **kwargs):
        super(OrderLineFormSetHelper, self).__init__(*args, **kwargs)
        self.form_method = 'post'
        self.template = 'bootstrap3/table_inline_formset.html'
        self.render_required_fields = True
        self.form_tag = False

HTML

row0
<select class="select form-control" id="id_orderline_set-0-product_type" name="orderline_set-0-product_type">
<select class="select form-control" id="id_orderline_set-0-product" name="orderline_set-0-product">
row1
<select class="select form-control" id="id_orderline_set-1-product_type" name="orderline_set-1-product_type">
<select class="select form-control" id="id_orderline_set-1-product" name="orderline_set-1-product">
etc

【问题讨论】:

    标签: javascript jquery python django drop-down-menu


    【解决方案1】:

    每次产品类型选择更改值时,您必须使用 Ajax 请求特定类型,然后将结果附加到产品选择。从绑定选择产品类型上的“更改”事件开始,然后使用“$.post”发送选择的类型,最后将结果附加到产品选择中。

    【讨论】:

    猜你喜欢
    • 2014-11-27
    • 1970-01-01
    • 2019-12-08
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2018-11-15
    相关资源
    最近更新 更多