Список пропуска Django для создания вариантов - PullRequest
0 голосов
/ 06 ноября 2018

Я хочу создать 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 Ответ

0 голосов
/ 06 ноября 2018

Вышеописанное не будет работать, поскольку определяемое здесь choices будет взято из переменной с именем choices при построении класса .

Однако вы можете сгенерировать:

<code>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(<b>products=['product A', 'product B']</b>)
    # ...
    # return some HttpResponse</code>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...