Django-tables2 - 我不能在 "text" 参数中使用 [A('argument')] 吗?

Django-tables2 - can't I use [A('argument')] inside the "text" parameter?

我试图使这个 table 带有一个可点击的字段,该字段将条目的布尔值更改为相反的值。它有效,但我想要一个替代文本,因为 "False" 或 "True" 看起来不太好,而且用户主要是挪威人。

def bool_to_norwegian(boolean):
    if boolean:
        return "Ja"
    else:
        return "Nei"


class OrderTable(tables.Table):

    id = tables.LinkColumn('admin_detail', args=[A('id')])
    name = tables.Column()
    address = tables.Column()
    order = tables.Column()
    order_placed_at = tables.DateTimeColumn()
    order_delivery_at = tables.DateColumn()
    price = tables.Column()
    comment = tables.Column()
    sent = tables.LinkColumn('status_sent', args=[A('id')])
    paid = tables.LinkColumn('status_paid', args=[A('id')], text=[A('paid')])

    class Meta:
        attrs = {'class': 'order-table'}

如果您查看我正在测试的 "paid" 条目,为什么我不能使用与 args 中相同的访问器访问数据?如果我将 args 更改为 args=[A('paid')] 并查看 link,它确实包含正确的数据。型号名称与本table相同,"paid"和"sent"为BooleanFields。

这就是我最终想要的:

text=bool_to_norwegian([A('paid')])

这是我发送给 table 的内容:

orders = Order.objects.order_by("-order_delivery_at")
orders = orders.values()
table = OrderTable(orders)
RequestConfig(request).configure(table)

text 参数需要一个接受记录的可调用对象,returns 一个文本值。您正在向它传递一个列表(它将忽略它),并且您的函数需要一个布尔值而不是记录。这里也不需要使用访问器。

像这样的东西应该可以工作:

def bool_to_norwegian(record):
    if record.paid:
        return "Ja"
    else:
        return "Nei"

然后在您的专栏中:

paid = tables.LinkColumn('status_paid', text=bool_to_norwegian)

(请注意,从您的问题中不清楚数据来自何处 - paid 是布尔值吗?您可能需要对其进行调整以适应)。

顺便说一句,您将 args 传递给您的专栏的方式很奇怪(文档似乎也建议这样做,但我不明白为什么 - 这非常令人困惑)。更标准的方法是:

id = tables.LinkColumn('admin_detail', A('id'))

或使用命名参数:

id = tables.LinkColumn('admin_detail', accessor=A('id'))