【问题标题】:How to order Django Tables2 column by model property that depends on outside model query如何通过依赖于外部模型查询的模型属性对 Django Tables2 列进行排序
【发布时间】:2018-08-15 21:52:24
【问题描述】:

假设我有两个模型,一个带有属性:

class Name(models.Model):
    name = models.CharField()

class Name_ID(models.Model):
    name_id = models.IntegerField()

    @property
    def object_name(self):
        try:
            return Name.objects.get(id=self.name_id)
        except Name.DoesNotExist:
            return ''

然后我尝试使用 django-tables2 为 Name_ID 模型创建一个表:

class NameIDTable(tables.Table):
    object_name = tables.Column()

    class Meta:
        model = Name_ID
        row_attrs = {'data-id': lambda record: record.pk}
        exclude = ('name_id',)
        attrs = {'class': 'table table-striped', 'style': 'display: block; overflow: auto;'}

该表成功显示了包含属性中所有值的 object_name 列。但是,当我尝试单击它的列标题以便按名称对其进行排序时,我收到错误消息,因为“object_name”不是 Name_ID 模型中的实际字段。我发现的许多解决方案都不起作用,因为它们假设您使用的是模型本身的字段,而不是来自外部模型的查询。如何使表可以通过 object_name 属性排序?

【问题讨论】:

    标签: python django django-tables2


    【解决方案1】:

    文档对此有一个页面:custom ordering

    也就是说,你应该告诉 django-tables2 如何排序查询,这不是 django-tables2 可以为你做的事情,因为你的属性的实现对 django-tables2 是不透明的。在您的示例中,如果 name_id 列是 models.ForeignKey 而不是 models.IntegerField(),事情会更容易,但我认为您有理由这样做。

    如果您知道如何对查询进行排序,则可以编写 order_object_name 方法,如文档中所述。

    【讨论】:

    • 试过了。不知道如何将外部模型查询与之集成。
    • 你现在用“那个”指的是什么?
    • 我尝试使用 order_object_name 方法,但模型查询不能很好地使用它。
    猜你喜欢
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 2019-06-05
    • 2012-05-16
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    相关资源
    最近更新 更多