【发布时间】:2011-04-30 03:53:01
【问题描述】:
我正在尝试根据 QuerySet 中的对象作为字符串的评估方式对我的 QuerySet 进行排序。
所以我的模型看起来像这样:
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__')
我想知道是否有办法在没有自定义管理器的情况下做到这一点。
谢谢!
【问题讨论】:
-
即使使用自定义管理器也做不到。
-
您会考虑保存作为字符串值的非规范化字段,而不是那种hackery?我的意思是在你的系统模型上抛出另一个字段,并在必要时通过覆盖 save() 来更新它,然后你可以按这个其他字段排序...
-
@Henry 您能否详细说明非规范化字段与我当前使用的字段的区别是(或给我一个指针?)谢谢。那肯定行得通。虽然,感觉有点浪费空间?
标签: python django django-models django-queryset