2014-04-03 46 views
0

我有這樣的模式:django在表單中獲取登錄用戶以構建queryset?

class Searches(models.Model): 
    user = models.ForeignKey(User) 
    .....other fields 

每個user具有一定的保存的搜索。我想顯示form(一choiceSelect widget)選擇幾個搜索的一個,然後點擊去。我想在form中的filter只顯示該特定Usersearches。這是我試過的。但下面的request.user不起作用。如何解決這個問題?

這是我的形式:

class SearchesForm(forms.Form): 
    #get the queryset for the searches model of logged in user 
    qset=Searches.objects.filter(user=request.user) ----> error 
    #get the most recent entry 
    default=Searches.objects.latest('id') 
    choices = forms.ModelChoiceField(queryset=qset,label='select search',initial=default) 

編輯: 我的觀點:

def display_search_user(request): 
    form=SearchesdiffForm(request) 
    if request.method=='POST': 
     search=SearchesdiffForm(request,data=request.POST) 
     print search 
     return HttpResponse(search) 
    return render(request,'search_list.html',{'form':form}) 

回答

3

的查詢集的instance創建服務器啓動時並沒有對request在知識時刻。該request是具體到每個request

你必須通過請求表單__init__當您創建視圖的形式:

class SearchesForm(forms.Form): 
    choices = forms.ModelChoiceField(queryset=Searches.objects.none(), 
            label='select search') 

    def __init__(self, request, *args, **kwargs): 
     super(SearchesForm, self).__init__(*args, **kwargs) 
     if request.user: 
      queryset = Searches.objects.filter(user=request.user) 
     else: 
      queryset = Searches.objects.all() 
     latest = queryset.latest('id') 
     self.fields['choices'].queryset = queryset 

def my_view(request): 
    if request.method == 'POST': 
     form = SearchesForm(request, request.POST) 
     if form.is_valid(): 
      # return search template here. 
      return render(...) 
    else: 
     form = SearchesForm(request, request.POST) 
    return render(request, 'template_name.html', {'form': form}) 
+0

Searches.objects.empty()是未定義這是爲什麼? –

+0

對不起,這是我的錯誤。我修復了代碼。 –

+0

是的,我想通了,我試過,但我得到'MultiValueDictKeyError' –