使用Django Python中的kwargs将参数推入Tables2

时间:2015-10-20 07:15:33

标签: python django django-tables2

我试图将数据从DJANGO视图推送到Tables对象,并将其作为参数传递。在这种情况下,我想将名为 doc_id 的变量传递给名为 tableName

的Tables2对象

在本例中,我将doc_id设置为1,并将其传递给

查看

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仍被指定为None,而不是1。

将参数传递给Tables2实例的正确方法是什么?有可能吗?

编辑:为上下文添加更多信息。

在现实世界中,我有一个观点。该视图从名为doc_id的URL中获取参数。该doc_id用于从名为' MaterialCollection'的模型中获取对象,并将其作为' mc'返回。

' 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中的许多属性构建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 个答案:

答案 0 :(得分:1)

我看到您的表类名称为tableName,因此如果您希望__init__按预期工作,请更改以下行:

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

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

除了这个明显的问题,你的代码还有一些问题:

  • 您的课程必须以大写字母(TableName代替tableName
  • 开头
  • 您的表类应以-Table结尾(例如NameTable
  • 我正在使用django-tables2多年,从不需要传递__init__中的内容,就像你在这里做的那样。你确定你真的需要这样做吗?
  • 如果您要过滤表格的数据,则必须视图进行过滤 - 该表格将获得过滤的 >要显示的数据。