2010-08-16 77 views
6

我想通過URL將變量傳遞給django管理中的另一個頁面。 它似乎不工作,我想通過變量「/?name = hello」,並通過request.GET.get [「名稱」,「」],但網址變成「/?e = 1 「它通過後。 如果我使用默認參數'q',它可以工作,但它會產生衝突。 看來這個問題只是django-admin。我需要通過URL傳遞它沒有發佈... 沒有任何一個知道如何解決這個問題Django管理員:通過URL傳遞變量

感謝

+1

無厘頭,'request.GET.get [ 「名稱」, 「」]'會導致'TypeError'。 – 2010-08-16 20:50:15

回答

1

你能解釋一下你的問題多一點....爲什麼你想傳遞一個變量Django管理... 還你不能趕上GET變量像這樣... 要麼使用:

request.GET['name'] 

request.GET.get('name','') 

.get是一種實例方法,不是字典。

+0

我用它request.GET.get('name','')。 我想將這個變量傳給管理員,告訴他哪些報告顯示出來。 q = 0顯示提交的報告。 q = 1以顯示已被分配的rpoets等。 – Grey 2010-08-17 03:17:10

+0

我只能通過使用參數q來執行此操作。其中q由搜索字段使用。很好。但現在我需要使用搜索字段。和q將用於此。所以我需要真正解決它。 – Grey 2010-08-17 03:26:25

+0

你可能會認爲我爲什麼不考慮POST。原因是,如果有更多的報告可以顯示一個頁面。 djang admin使用p = 1,p = 2來使用多個頁面來顯示所有報告。但如果我不使用GET,它會鬆動跟蹤 – Grey 2010-08-17 03:27:56

9

問題是當get_query_set試圖將其作爲模型字段解析時,查找name不存在。因此會引發一個IncorrectLookupParameters()異常,然後重定向到不太有用的「e = 1」網址。這個問題在Django 1.4中通過引入自定義filterspecs來解決。在此之前,一種可能的解決方案是動態地覆蓋由您的ModelAdminsget_changelist()方法返回的ChangeList類。

該解決方案適用於Django的1.3:

class MyModelAdmin(ModelAdmin): 

    def get_changelist(self, request, **kwargs): 
     changelist_class = super(MyModelAdmin, self).get_changelist(request, 
                   **kwargs) 

     class CustomChangeList(changelist_class): 
      def __init__(self, request, *args, **kwargs): 
       self._name = request.GET.get('name') 
       super(CustomChangeList, self).__init__(request, *args, **kwargs) 

      def get_query_set(self, *args, **kwargs): 
       if self._name: 
        del self.params['name'] 

       qs = super(CustomChangeList, self).get_query_set(*args, **kwargs) 

       if self._name: 
        return qs.filter([FILTER WHAT YOU WANT HERE...]) 

       return qs 


     return CustomChangeList