我想根據QuerySet中的對象如何評估爲字符串來對我的QuerySet進行排序。Django QuerySet order_by字符串評估
所以我的模型看起來是這樣的:
class System(models.Model):
operating_system = models.CharField(...)
language = models.CharField(...)
locale = models.CharField(...)
def __unicode__(self):
def __clean(orig, new):
if orig is None or orig == "":
if new is None or new == "":
return ""
else:
return str(new)
else:
if new is None or new == "":
return str(orig)
else:
return str(orig) + " " + str(new)
name = None
for attr in System._meta.fields:
if attr.name != "id":
name = __clean(name, getattr(self, attr.name))
for m2mfield in System._meta.many_to_many:
for object in getattr(self, m2mfield.name).all():
name = __clean(name, object)
if name == "":
return "Undefined"
return name
而且,我希望能夠做一個查詢是這樣的:
System.objects.filter(...).order_by('__unicode__')
我不知道是否有一種方法在沒有自定義管理器的情況下這樣做
謝謝!
你甚至不能用*自定義管理器來做它。 – 2011-04-30 03:55:39
而不是那個駭客,你會考慮保存一個非規範化的字段是字符串值嗎?我的意思是在你的系統模型上拋出另一個字段,並根據需要更新它,也許通過重寫save(),然後你可以通過這個其他字段來排序... – Henry 2011-04-30 03:57:00
@Henry你能否詳細說明非規範化字段與字段的區別我目前使用的是(或給我一個指針?)謝謝。這絕對可行。雖然,感覺有點浪費空間? – 2011-05-02 14:39:13