【问题标题】:Custom columns in django_tables2django_tables2 中的自定义列
【发布时间】:2016-03-07 09:27:28
【问题描述】:

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

# 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 的结果吗?我假设我需要使用访问器,但我看不到如何使用它访问查询集数据。谢谢!

【问题讨论】:

    标签: django django-tables2


    【解决方案1】:

    我最后想通了,其实也不算太难:) 因此,使用我上面的示例,为了使用关联模型中的函数添加自定义列,您只需使用 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') 指定一个集合

    【讨论】:

    • 我也面临同样的问题。我们可以根据访问者进行排序吗?它似乎不起作用。给出无法将“名称”解析为字段名称的错误。
    • 好吧,如果可行,您可以使用order_by=('my_field', 'my_field2') 指定列上的排序...否则我想您可以真正使用此计算值进行排序的唯一方法是在模型中创建一个新字段并为数据库中的每个条目保存它。
    • 我不认为将其直接存储在数据库中是一种好方法。 order_by 是指在查询集中输入 order_by 吗?因为这在我们对自定义字段进行排序时会出错。我在 Github 上关注了这个问题,但它也不起作用。 github.com/bradleyayers/django-tables2/issues/413
    • 让我很开心......!......非常感谢
    • This page in the docs 提供有关对自定义列进行排序的更多信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-13
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多