2016-02-29 4 views
0

Как в Django я могу получить доступ к requset в форме? Мне нужно это, чтобы получить кортеж данных, чтобы пройти выбор. Ниже INIT подход не работает: NameError: название 'запрос' не определен, с самим собой или без: self.request.GET.get ('проект') или request.GET.get («проект»)Django: Access request.GET в форме, чтобы передать запрос как выбор

class PostfilterForm(forms.Form): 
    def __init__(self, *args, **kwargs): 
     self.request = kwargs.pop("request") 
     super(PostfilterForm, self).__init__(*args, **kwargs) 

    monitoring_words_to_show = Nlpmonitorword.objects.filter(monitoringwords__name = self.request.GET.get('project')) 
    words_list = [] 
    for word in monitoring_words_to_show: 
     words_list.append((word.monitor_word, word.monitor_word))  
    words_list = tuple(words_list) # trying to get here tuple to pass in choises (('vk', 'vk'), ('fb', 'fb'), ('vkfb', 'vkfb')) 

    project = forms.CharField(required=True, label='') 
    monitor = forms.MultipleChoiceField(widget=forms.SelectMultiple, choices=words_list, required=False, label='') 
+0

Возможный дубликат [Как получить доступ к объекту запроса или любой другой переменной в методе Форм, чистой()?] (Http://stackoverflow.com/questions/1057252/how-do-i-access -the-request-object-or-any-other-variable-in-a-forms-clean-met) – Sayse

+0

Дубликат ссылается на фактический вопрос, который вы задаете, но у вас есть куча кода, показанного здесь, который не является в методе/функции, который, вероятно, является реальной проблемой. – Sayse

+0

@Sayse Я видел этот ответ и указал на вопрос, что он не работает по какой-то причине –

ответ

1

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

Форма:

class PostfilterForm(forms.Form): 
    def __init__(self, project, *args, **kwargs): 
     self.project = project 

Вид:

project = request.GET.get('project') 
form = PostfilterForm(project, request.POST) 
+0

это кажется разумным, не могли бы вы указать, что происходит после строки инициализации, я попробовал def __init __ (self, project, * args, ** kwargs): self.project = kwargs.pop ("project") super (PostfilterForm, self) .__ init __ (project, * args, ** kwargs), но получил ошибку NameError: name 'project' не определен –

+0

, передающий параметр as a kwarg, а затем его по-другому, но поскольку форма всегда нуждается в проекте, и это необязательный параметр, я предпочитаю использовать его в качестве обязательного аргумента. Просто удалите поп-строку и используйте проект, потому что он передается в функцию init как параметр по представлению. – nima

+0

Хм, странно. с этим изменением: if pass 'error проекта NameError: name' project 'не определен, тогда, если pass self.project ошибка NameError: name' self 'не определен –

1

Все код, который вы пытаетесь использовать не используется в рамках метода, который означает, что он не принадлежит ни одному экземпляру PostFilterForm и поэтому не знает о self, не говоря уже о его полях.

Вы должны включить их в функцию, хотя какая функция должна быть неясной.

def my_function(self): 
    monitoring_words_to_show = Nlpmonitorword.objects.filter(monitoringwords__name = self.request.GET.get('project')) 
    words_list = [] 
    for word in monitoring_words_to_show: 
     words_list.append((word.monitor_word, word.monitor_word))  
    words_list = tuple(words_list) # trying to get here tuple to pass in choises (('vk', 'vk'), ('fb', 'fb'), ('vkfb', 'vkfb')) 

 Смежные вопросы

  • Нет связанных вопросов^_^