Используйте переменную внутри __init__ снаружи __init__ - PullRequest
0 голосов
/ 28 мая 2019

Я хочу использовать переменную внутри def__init__ вне def__init__. Это def__init__ в моем классе:

class UserResponseSearchForm(forms.Form):
    def __init__(self, *args, **kwargs):
           qry = kwargs.pop('qry')
           super(UserResponseSearchForm,self).__init__(*args, **kwargs)

Я хочу использовать переменную qry снаружи def__init__, например:

class UserResponseSearchForm(forms.Form):
    def __init__(self, *args, **kwargs):
           qry = kwargs.pop('qry')
           super(UserResponseSearchForm,self).__init__(*args, **kwargs)
gejala_id1 = forms.ModelMultipleChoiceField(queryset=Gejala.objects.all().values_list('gejala', flat=True).distinct().filter(gejala__icontains = qry).order_by('gejala'), widget=forms.CheckboxSelectMultiple, required=False)

Я использую переменную qry в gejala__icontains = qry вот так:

filter(gejala__icontains = qry)

И возвращаемое имя 'qry' не определено . В чем проблема с этим? А как использовать переменную qry ? Надеюсь, что кто-нибудь может мне помочь.

1 Ответ

1 голос
/ 28 мая 2019

Вам нужно сделать это внутри __init__:

class UserResponseSearchForm(forms.Form):
    def __init__(self, *args, **kwargs):
        qry = kwargs.pop('qry')
        super(UserResponseSearchForm,self).__init__(*args, **kwargs)
        self.fields['gejala_id1'] = forms.ModelMultipleChoiceField(queryset=Gejala.objects.filter(gejala__icontains = qry).distinct().order_by('gejala'), widget=forms.CheckboxSelectMultiple, required=False)

Обратите внимание, что вы должны не делать values_list('gejala', flat=True) для ModelMultipleChoiceField, потому что это поле ожидает объекты, а не плоский список строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...