代码之家  ›  专栏  ›  技术社区  ›  Davtho1983

django pass list to form创建选项

  •  1
  • Davtho1983  · 技术社区  · 6 年前

    我想在一个表单上创建一个choicefield,该表单具有通过视图传递给它的列表中的选项。

    from django import forms
    
    class OrderForm(forms.Form):
        product_choices = []
    
        def __init__(self, products=None, *args, **kwargs):
            super(OrderForm, self).__init__(*args, **kwargs)
            if products:
                print(products)
                choices = enumerate(products)
    
        product_name = forms.ChoiceField(label='Product', choices=choices)
    

    不知道如何使用init函数来实现这一点?

    1 回复  |  直到 6 年前
        1
  •  1
  •   willeM_ Van Onsem    6 年前

    上述方法不起作用,因为 choices 这里的define将取自名为 选择 在建造 .

    但是,您可以生成:

    from django import forms
    
    class OrderForm(forms.Form):
    
        product_name = forms.ChoiceField(label='Product', choices=[])
    
        def __init__(self, products=None, *args, **kwargs):
            super(OrderForm, self).__init__(*args, **kwargs)
            if products:
                self.fields['product_name'].choices = [
                    (str(k), v)
                    for k, v in enumerate(products))
                ]/code>

    你就这样构造了一个 OrderForm 并通过 products 参数,例如:

    def some_view(request):
        form = OrderForm(products=['product A', 'product B'])
        # ...
        # return some HttpResponse