在 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 将获取 过滤后的 数据以显示。