2016-12-07 7 views
0

В документации Django говорится, что параметр options = для форм. ChoiceField может быть вызываемым. https://docs.djangoproject.com/en/1.10/ref/forms/fields/ Любой, кто может дать мне пример того, как это будет выглядеть? Больше не можете найти об этом в официальной документации.django, примеры использования вызываемых для выбора форм.ChoiceField

ответ

2

Они означают, что он может принимать функцию (или что-то, что можно назвать, отсюда и имя), которое должно возвращать значения, которые он хочет. Вот краткий пример:

def callableForChoices(): 
    return [("Value1", "Name1"), ("Value2", "Name2"), ("Value3", "Name3")] 

forms.ChoiceField(choices=callableForChoices) 

Это обычно используется, когда вам нужно динамически строить варианты.

+0

Да, именно то, что я пытаюсь сделать. Но знаете ли вы, могу ли я выполнять функцию извне формы.py? – Janic

+0

Абсолютно. Просто импортируйте его и используйте его, как и любой другой. – joeb

1

Простейшие пример я могу думать:

DAY_CHOICES = (
    ('2016-01-02', 'Today'), 
    ('2016-01-01', 'Yesterday'), 
) 

forms.ChoiceField(choices=DAY_CHOICES) 

Конечно, это не желательно, чтобы эти статические значения. Таким образом, подходящая альтернатива здесь является лучшей:

def get_days(): 
    return (
     (date.today(), 'Today'), 
     (date.today() - timedelta(1), 'Yesterday'), 
    ) 

forms.ChoiceField(choices=get_days) 
+0

Большое вам спасибо! Можно ли вызвать функцию извне формы.py? – Janic

+0

Конечно, просто импортируйте его из другого модуля. – lucasnadalutti