@nurzhannogerbek

Как правильно создать кастомный виджет для поля?

Здравствуйте! Помогите пожалуйста разобраться.

Пытаюсь создать кастомный widget для поля как на картинке снизу. Есть форма c полем function (ModelMultipleChoiceField). queryset для поля я формирую во view и передаю через конструктор в форму. В queryset передаются все Группы (Group). Написал template для виджета. Хочу дать возможность пользователю выбрать несколько функций через checkbox-ы. Использовал следующий код, но форма пустая, почему метод render в кастомном виджете не работает? Думаю нужно передать groups в тег, который в виджете, но как?

cd519643e76d4756ad6f697965a7e8bd.jpg

forms.py:
class RequirementForm(forms.ModelForm):
    function = forms.ModelMultipleChoiceField(required=True, widget=CustomTreeWidget, queryset=Group.objects.none())

    class Meta:
        model = Requirement
        fields = ('function',)

    def __init__(self, all_groups, all_user_characteristics, *args, **kwargs):
        super(RequirementForm, self).__init__(*args, **kwargs)
        self.fields['function'].queryset = all_groups  # Cписок всех Групп берутся из view


tree_widget.html:
{% for group in groups %}
    <p>{{ group }}</p>
    {% for task in group.task_set.all %}
        <p>{{ task }}</p>
        {% for function in task.function_set.all %}
            <input type="checkbox" name="option" value="{{ function }}">{{ function }}<br>
        {% endfor %}
    {% endfor %}
{% endfor %}


widgets.py:
class CustomTreeWidget(Widget):
    template_name = 'tree_widget.html'

    def render(self, name, value, attrs=None):
        template = loader.get_template(self.template_name)
        return mark_safe(template)
  • Вопрос задан
  • 340 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы