Выбор виджетов моделей Django на основе переменных URL - PullRequest
0 голосов
/ 17 апреля 2019

Допустим, у меня есть форма на основе модели:

Form1:
class Meta:
    model = Comment
        widgets = {"field1": forms.HiddenInput } # option 1
#or 
    widgets = {"field2": forms.HiddenInput } # option 2

И у меня есть 2 варианта виджетов.Первое - отображает 2-е поле, но скрывает 1-е и второе - другое.Выбор варианта 1 или варианта 2 зависит от того, какую «ключевую» переменную он получит от URL kwargs.Например, если ключ == 1, тогда выбирается вариант 1, если ключ == 2 - тогда выбирается второй вариант.

#example

<a href="{%  url "app:route" key="1 or 2 " pk=object.pk %}"> COMMENT</a>

Вопрос в том, как добраться до словаря self.kwargs в .forms?Или есть альтернативный, менее глупый способ сделать это?Конечная цель - использовать один из вариантов, основываясь на переменной «ключ», то есть разные URL будут отправлять разные переменные «ключ = x».

Где я мог бы реализовать такую ​​логику в Django?Просмотры?

1 Ответ

1 голос
/ 17 апреля 2019

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

Измените __init__ вашей формы:

#forms.py

class Form1(ModelForm):
    def __init__(self, key, *args, **kwargs):
        super(Form1, self).__init__(*args, **kwargs)
        if key == 1:
            self.fields['field1'].widget = forms.HiddenInput()  # option 1 HiddenInput() 
        else:
            self.fields['field2'].widget = forms.HiddenInput()  # option 2 HiddenInput() 

    class Meta:
        model = Comment

Затем, на ваш взгляд, добавьте ключ из kwargs запроса в форме kwargs

# views.py

class MyFormView(FormView):
    form_class = Form1

    def get_form_kwargs(self):
        kwargs = super(MyFormView, self).get_form_kwargs()
        kwargs['key'] = self.kwargs.get('key')
        return kwargs
...