在Flask中,如何从选择字段中获取输入?

时间:2019-12-06 11:19:28

标签: flask

我尝试应用我在此答案中看到的内容,但它不起作用:

Getting value from select tag using flask

我看不出他的情况有什么不同,所以我不明白为什么我的工作不起作用。

这是我的路线:

INSERT INTO [Table B] ([Personal Code], Unit)
    SELECT  [Personal Code],
            STRING_AGG(Unit, ' / ')
      FROM  [Table A]
      GROUP BY [Personal Code]

这是我的HTML: (我包括了用来更改显示的JS,以防万一我弄乱了它,尽管我看不到。)

(另外,请注意,下面的HTML是通过jinja2 include语句放置在主页中的,但是该模式已正确显示,所以我也看不到它会如何影响它。

class ChildSerializer(serializers.ModelSerializer):

    class Meta:
        model = models.Child
        fields = ['id', 'name', 'parent']

class ParentChildSerializer(serializers.ModelSerializer):

    class Meta:
        model = models.Child
        fields = ['id', 'name']

class ParentSerializer(serializers.ModelSerializer):
    children = ParentChildSerializer(many=True)

    class Meta:
        model = models.Parent
        fields = ['id', 'name', 'children']

    def create(self, validated_data):
        children = validated_data.pop('children')
        parent = super().create(validated_data)
        for child in children: 
            child['parent'] = parent
        self.fields['children'].create(children)
        return parent

我试图弄清楚放置@bp.route('/ecommerce/cart/add/product/<id>', methods=['GET', 'POST']) @login_required def ecommerceCartAdd(id): select = request.form.get('modal-product-quantity') print(str(select)) p = stripe.SKU.retrieve(id) product = dict( id=p.id, prod_id=p.product, name=p.attributes.name, image=p.image, price=convert_price(p.price) ) session['cart'].append(product) flash(f"[{product['name']}] added to cart", "info") return redirect(url_for('projects.ecommerce')) 的位置以及将 <div class="modal-footer"> <form class="form-inline" method="POST" action="{{ url_for('projects.ecommerceCartAdd', id=p.id) }}"> <div class="input-group"> <label class="mr-sm-2 float-left" for="prod-quantity-select">Quantity: </label> <select class="custom-select float-left" id="prod-quantity-select" onchange="AdjustQuantity()" name="modal-product-quantity"> <option selected value="1">1</option> {% for i in range(2, 100) %} <option value="{{ i }}">{{ i }}</option> {% endfor %} </select> </div> <script> function AdjustQuantity() { var q = document.getElementById("prod-quantity-select"); var quantity = q.options[q.selectedIndex].value; document.getElementById("modal-price-label").innerHTML = 'Total: '; document.getElementById("modal-price-counter").innerHTML = '(x' + quantity + ')'; } </script> <a href="{{ url_for('projects.ecommerceCartAdd', id=p.id) }}" class="btn btn-primary btn-sm"> Add to cart </a> </form> <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">Close</button> </div> 放置在action="url_for...标签而不是method="POST"标签中的情况。

无论我做什么,我的输出都是select。而且,我知道该路由未使用form方法,因为当我将None语句放在条件POST中时,它不会打印-但就像我说的那样,否则它将打印print

我需要帮助来了解如何通过if request.method="POST"字段发布和访问数据。

谢谢!

1 个答案:

答案 0 :(得分:1)

有一个ahref伪装成一个按钮,因此您没有提交表单。

尝试更改此内容:

<a href="{{ url_for('projects.ecommerceCartAdd', id=p.id) }}" class="btn btn-primary btn-sm"> Add to cart </a>

对此:

<button type="submit" class="btn btn-primary btn-sm"> Add to cart </button>