在 Django 中使用 kwargs 将参数推送到 Tables2 Python
Pushing Arguments into Tables2 using kwargs in Django Python
我试图将数据从 DJANGO 视图推送到 Tables 对象,并将其作为参数传递。在这种情况下,我想将一个名为 doc_id 的变量传递给一个名为 tableName[= 的 Tables2 对象48=]
在这个例子中,我将 doc_id 设置为 1,并将其传递给
查看
def editorView(request):
doc_id = 1
table = tableName(UserProfile.objects.filter(), doc_id=doc_id)
Table
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 仍然被分配为 None,而不是 1.
将参数传递给 Tables2 实例的正确方法是什么?可能吗?
编辑:为上下文添加更多信息。
在现实世界的场景中,我有一个看法。该视图采用来自 URL 的参数 doc_id。 doc_id 用于从名为 'MaterialCollection' 的模型中抓取对象,而 return 则为 'mc'.
'mc' 然后传递到 table
查看
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 ...
在我的 table 中,我创建了一个自定义 LinkColumn。该 linkColumn 用于根据模型 'UserProfile' 和 mc.
中的多个属性构建 URL
Table
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 与 UserProfile 有 FK(1:M)关系。
我看到您的 table class 的名称是 tableName
所以如果您希望 __init__
按预期工作,请更改行:
super(unassignedUsers, self).__init__(*args, **kwargs)
到
super(tableName, self).__init__(*args, **kwargs)
除了这个明显的问题,您的代码还有一些问题:
- 您的 class 必须以大写字母开头(
TableName
而不是 tableName
)
- 您的 table classes 应该以 -Table 结尾(例如
NameTable
)
- 我使用 django-tables2 很多年了,从来没有 需要像您在这里做的那样在
__init__
中传递一些东西。你确定你真的需要这样做吗?
- 如果您想过滤 table 的数据,过滤 必须 对您的 视图 - table 将获取 过滤后的 数据以显示。
我试图将数据从 DJANGO 视图推送到 Tables 对象,并将其作为参数传递。在这种情况下,我想将一个名为 doc_id 的变量传递给一个名为 tableName[= 的 Tables2 对象48=]
在这个例子中,我将 doc_id 设置为 1,并将其传递给
查看
def editorView(request):
doc_id = 1
table = tableName(UserProfile.objects.filter(), doc_id=doc_id)
Table
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 仍然被分配为 None,而不是 1.
将参数传递给 Tables2 实例的正确方法是什么?可能吗?
编辑:为上下文添加更多信息。
在现实世界的场景中,我有一个看法。该视图采用来自 URL 的参数 doc_id。 doc_id 用于从名为 'MaterialCollection' 的模型中抓取对象,而 return 则为 'mc'.
'mc' 然后传递到 table
查看
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 ...
在我的 table 中,我创建了一个自定义 LinkColumn。该 linkColumn 用于根据模型 'UserProfile' 和 mc.
中的多个属性构建 URLTable
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 与 UserProfile 有 FK(1:M)关系。
我看到您的 table class 的名称是 tableName
所以如果您希望 __init__
按预期工作,请更改行:
super(unassignedUsers, self).__init__(*args, **kwargs)
到
super(tableName, self).__init__(*args, **kwargs)
除了这个明显的问题,您的代码还有一些问题:
- 您的 class 必须以大写字母开头(
TableName
而不是tableName
) - 您的 table classes 应该以 -Table 结尾(例如
NameTable
) - 我使用 django-tables2 很多年了,从来没有 需要像您在这里做的那样在
__init__
中传递一些东西。你确定你真的需要这样做吗? - 如果您想过滤 table 的数据,过滤 必须 对您的 视图 - table 将获取 过滤后的 数据以显示。