Использовать переменную внутри __init__ за пределами __init__

Я хочу использовать переменную внутри 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)

Я хочу использовать переменную вопрос снаружи 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)

Я использую переменную вопрос в gejala__icontains = запрос следующим образом:

filter(gejala__icontains = qry)

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

Можете ли вы исправить отступ, пожалуйста? Непонятно, как вы хотите назвать вещи.

poke 28.05.2019 17:02

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

Daniel Roseman 28.05.2019 17:02

Но я должен использовать его внутри gejala_id1, чтобы получить фактические данные

kelvinrayner 28.05.2019 17:07

ваше поле gejala_id1 определено вне класса UserResponseSearchForm, поэтому вы все равно не можете использовать его где-либо в своем коде django. Я думаю, что вы хотите определить поле как часть вашей формы, верно?

dirkgroten 28.05.2019 17:10

Мой gejala_id1 определен внутри класса UserResponseSearchForm и def __init__ внутри этого класса. Итак, я хочу использовать переменную qry внутри def __init__

kelvinrayner 28.05.2019 17:15
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
302
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это нужно сделать внутри __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, потому что это поле ожидает объекты, а не плоский список строк.

Хорошо, спасибо, а как мне вызвать html-файл и сделать его формой с множественным выбором?

kelvinrayner 28.05.2019 17:20

Вы делаете это на свой взгляд. Я полагаю, вы где-то используете форму... Если вы не знаете, как отображать форму django, прочитайте это

dirkgroten 28.05.2019 17:21

Хорошо, спасибо, это работа, но данные не различимы. Я должен различать данные

kelvinrayner 28.05.2019 17:23

В каком смысле не различаются? Что нужно выделить? вы можете передать аргумент функции distinct, чтобы указать, что должно быть отличным, без аргумента он просто гарантирует разные объекты (т.е. отдельный первичный ключ).

dirkgroten 28.05.2019 17:35

Имя gejala я хочу выделить. Прежде чем я использую def __init__forms.ModelMultipleChoiceField(queryset=Gejala.objects.filte‌​r(gejala__icontains = qry).distinct().order_by('gejala'), widget=forms.CheckboxSelectMultiple, required=False) имя gejala отличного. После того, как я использую def __init___ имя gejala не отличается

kelvinrayner 28.05.2019 17:42

Тогда используйте distinct('gelaja'). Я сказал в своем предыдущем комментарии, что вы можете передать это как аргумент.

dirkgroten 28.05.2019 17:42
NotSupportedError at /diagnosis/results/ DISTINCT ON fields is not supported by this database backend это ошибка
kelvinrayner 28.05.2019 18:23

Какую базу данных вы используете?

dirkgroten 28.05.2019 18:48

Моя база данных sqlite

kelvinrayner 28.05.2019 18:52

Другие вопросы по теме