如何根据模型属性(取决于外部模型查询)对Django Tables2列进行排序

时间:2018-08-14 16:00:04

标签: python django django-tables2

说我有两个模型,一个具有属性:

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属性使表可排序?

1 个答案:

答案 0 :(得分:0)

文档上有一个页面:custom ordering

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

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