django_tables2 中的自定义列

Custom columns in django_tables2

我已经搜索过这个,但运气不佳,所以寻求一些帮助。我正在尝试使用模型中的函数定义向模型定义的 table 添加一些额外的列。这是我的代码现在的样子:

# models.py
class MyModel(models.Model):
    my_field = models.TextField()

    def my_function(self):
        # Return some calculated value based on the entry
        return my_value

# tables.py
class MyTable(tables.Table):

    my_extra_column = tables.Column(....)

    class Meta:
        model = MyModel

# views.py
table = MyTable(MyModel.objects.all())
RequestConfig(request).configure(table)
return render(request, ....)

我的问题是我可以访问传递给 MyTable 的条目中的 my_function 以便我可以在自定义 my_extra_column 列中显示 my_function 的结果吗?我假设我需要使用访问器,但我看不到如何使用它访问查询集数据。谢谢!

最后我想通了,其实也不难:) 因此,使用我上面的示例,为了使用关联模型中的函数添加自定义列,您只需使用 accessors ...

# models.py
class MyModel(models.Model):
    my_field = models.TextField()
    my_field_2 = models.IntegerField()

    def my_function(self):
        # Return some calculated value based on the entry
        return my_value

# tables.py
class MyTable(tables.Table):

    my_extra_column = tables.Column(accessor='my_function',
         verbose_name='My calculated value')

    class Meta:
        fields = ['my_field', 'my_field_2', 'my_extra_column']
        model = MyModel

如果您希望能够对这些数据进行排序,那么麻烦就来了,因为该函数不会转换为 MyModel 中的任何有效字段。因此,您可以使用 ordering=False 禁用此列的排序或使用 order_by=('field', 'field2')

指定一个集合