2016-02-29 54 views
0

Django中如何在窗體中訪問requset? 我需要這個讓數據元組通過選擇來形成。 下面初始化方法是行不通的:NameError:名字 '請求' 沒有定義,擁有自營或不:self.request.GET.get( '項目')request.GET.get( 「項目」)Django:在表單中訪問request.GET以將queryset作爲選項

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

可能的重複[如何訪問請求對象或窗體的clean()方法中的任何其他變量?](http://stackoverflow.com/questions/1057252/how-do-i-access - 請求對象或任何其他變量在表單清潔會見) – 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

這似乎是合理的,你可以點什麼去初始化字符串後,我曾嘗試高清__init __(自我,項目,* ARGS,** kwargs): self.project = kwargs.pop( 「項目」) 超(PostfilterForm,個體經營).__的init __(項目,* ARGS,** kwargs),但得到了一個錯誤NameError:名字 '項目' 是沒有定義 –

+0

傳遞參數作爲一個kwarg,然後彈出它是另一種方式,但由於表單總是需要項目,它不是一個可選參數,我更喜歡用它作爲強制性參數。只需刪除pop行並使用該項目,因爲它通過視圖作爲參數傳遞給init函數。 – nima

+0

嗯,很奇怪。與此編輯:如果通「工程的錯誤NameError:名字‘項目’沒有定義,那麼,如果通過self.project錯誤NameError:名字‘自我’是沒有定義 –

1

所有你想使用的代碼不在一個方法中使用,這意味着它不屬於任何一個PostFilterForm的實例,因此不知道它的領域。

你應該將這些包含在一個函數中,但是應該是什麼函數還不清楚。

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'))