我想根据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