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')
指定一个集合
我已经搜索过这个,但运气不佳,所以寻求一些帮助。我正在尝试使用模型中的函数定义向模型定义的 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')