第一篇文章在這真棒社區,我一直在閱讀前很長一段時間:)訂貨情況的Django tables2敏感
我已經使用這個夢幻般的圖書館「的Django tables2」當一個問題遇到過。當我訂購一個CharField一列,但它確實導致意外的行爲像這樣的區分大小寫排序:
Iago
Pablo
iago
我想在一個更自然的方式進行排序:
Iago
iago
Pablo
這是我的簡化表代碼:
class Inquiry(models.Model):
...
contact_last_name = models.CharField(max_length=50)
...
class Hometable(tables.Table):
contact_last_name = tables.Column(verbose_name="Contact", order_by=('contact_last_name'))
class Meta:
model = Inquiry
fields= ('contact_last_name',)
我知道在Django 1.8有一個內置的功能下做出不敏感ORDER_BY,但它不與Django的工作表:
contact_last_name = tables.Column(verbose_name="Contact", order_by=(Lower('contact_last_name')))
它導致異常:
TypeError at/
'Lower' object is not iterable
任何人做與Django的tables2類似的事情?
謝謝!
更新:解決方案是在視圖中使用小寫字段進行註釋,然後可以在表中進行排序。
class Inquiry(models.Model):
...
contact_last_name = models.CharField(max_length=50)
...
class Hometable(tables.Table):
contact_last_name = tables.Column(verbose_name="Contact", order_by=('contact_last_name_lower'))
class Meta:
model = Inquiry
fields= ('contact_last_name',)
和配置旨意表作爲阿拉斯代爾時作出適當的註釋在查詢集:
inquiries = inquiries.annotate(contact_last_name_lower=Lower('last_name'))
my_table = Hometable(inquiries)
「不可迭代」錯誤是因爲您錯過了'(Lower('contact_last_name'),'')中的逗號。解決該問題後可能無法工作,但錯誤信息會有所不同。 – Alasdair
如果現有答案不完整,最好給自己的問題添加一個答案,而不是在問題本身中包含答案。 – Alasdair