2015-10-20 51 views
0

我試圖將數據從DJANGO視圖推送到Tables對象中,並將它作爲參數傳遞。在這種情況下,我想傳遞一個稱爲可變DOC_ID成稱爲表名在Django Python中使用kwargs將參數推入表2

在本例中,我已設置DOC_ID爲1 Tables2對象,並把它傳遞到

查看

def editorView(request): 

    doc_id = 1 

    table = tableName(UserProfile.objects.filter(), doc_id=doc_id) 

class tableName(tables.Table): 

    tbl_doc_id = None   ## Creating a temporary variable 

    def __init__(self, *args, **kwargs): 
     temp = kwargs.pop("doc_id") ## Grab doc_ID from kwargs 
     super(tableName, self).__init__(*args, **kwargs) 
     self.tbl_doc_id = temp ## Assign to self.tbl_doc_id for use later 

    ### Do something with tbl_doc_id 
    modelFilter = model.objects.filter(pk = tbl_doc_id) 

當運行調試器,我可以看到tbl_doc_id仍被指定爲無,而不是1

什麼是參數傳遞到Tables2實例的正確方法?可能嗎?

編輯:爲上下文添加更多信息。

在現實世界中,我有一種觀點。該視圖從名爲doc_id的URL中獲取參數。該doc_id用於從名爲「MaterialCollection」的模型中獲取對象,並將其作爲「mc」返回。然後

'管委會' 被傳遞到表

查看

def editorView(request, doc_id): 
    try: 
     mc = MaterialCollection.objects.get(pk = doc_id) 
    except Material.DoesNotExist: 
     raise Http404("Document does not exist") 

    config = RequestConfig(request) 
    unnassigned_User_Table = unassignedUserTable(UserProfile.objects.filter(), mc=mc) 

... Other code + Render ... 

從我的表,我創建一個自定義LinkColumn。 linkColumn用於根據模型'UserProfile'和mc中的一些Attributes構建一個URL。

class unassignedUserTable(tables.Table): 

    mc = None 

    def __init__(self, *args, **kwargs): 
     temp_mc = kwargs.pop("mc") 
     super(unassignedUserTable, self).__init__(*args, **kwargs) 
     self.mc = temp_mc 

    current_Assignment = "NONE" 
    new_Assignment = "AS" 

    assign_Reviewer = tables.LinkColumn('change_Review_AssignmentURL' , args=[ A('user'), current_Assignment, new_Assignment, mc, A('id')], empty_values=(), attrs={'class': 'btn btn-success'}) 

    class Meta: 
     model = UserProfile 

     ... Setup excludes/sequence/attributes... 

在這個特定的實例。 MC有一個FK UserProfile(1:M)的關係。

回答

1

我看你的表類的名稱是tableName所以如果你想__init__按預期請更改線路工作:

 
super(unassignedUsers, self).__init__(*args, **kwargs) 

 
super(tableName, self).__init__(*args, **kwargs) 

除了這個明顯的問題,是您的代碼更多的問題:

  • 您的課程必須以大寫信(的TableName代替tableName
  • 你的表類應該結束與 - 表端(例如NameTable
  • 我使用的Django tables2多年,從來沒有傳遞__init__需要的東西,你正在做的這裏。你確定你確實需要這樣做嗎?
  • 如果你想過濾表的數據過濾必須可以做你的視圖 - 該表將得到過濾數據顯示。
+0

糟糕! super(unassignedUsers,self).__ init __(* args,** kwargs)代表我的疏忽。我試圖混淆代碼,這是一個疏忽。也許我會向代碼添加額外的信息來提供上下文。可能有更簡單的方法來實現我想要做的事情。 –

+0

你爲什麼要*代碼混淆?如果您試圖對python代碼進行混淆,那麼您違反了*所有* python原則 - 每當您這樣做時,天使都會失去它的翅膀 - 如果您想編寫混淆代碼,請使用其他語言! – Serafeim

+0

對不起,我的混淆,我的意思是概括了代碼。我試圖概括這些名稱,而不是從我的實際代碼庫中提供一塊板。我錯過了這些「未分配的用戶」。 我的歉意。 –