所以,在我Django.models我有一个类,如下所示:Django的:通过串排序对象的属性不按字母顺序
class Basicorderbook(models.Model):
ordernumber = models.ForeignKey('Idbook', db_column='OrderNumber', related_name='BasicOrder_IDNumber', primary_key=True) # Field name made lowercase.
username = models.ForeignKey('Userbook', db_column='Username', to_field='username', related_name='BasicOrder_Username') # Field name made lowercase.
price = models.FloatField(db_column='Price') # Field name made lowercase.
volume = models.FloatField(db_column='Volume') # Field name made lowercase.
type = models.CharField(db_column='Type', max_length=20) # Field name made lowercase.
...
def __unicode__(self):
return unicode(self.ordernumber.idnumber)
...
和下面的返回一个包含多个“基本的订单对象的视图“:
class BuyOrdersView(generic.ListView):
model = models.Basicorderbook
template_name = 'Blank.html'
context_object_name = 'buy_order_list'
def get_queryset(self):
"""
Returns the 5 most viable buy orders
"""
base_buy_order_list = models.Basicorderbook.objects.using('exchange').filter(
action = 'Buy',
#price > 520,
#active = 1
)
volume_buy_order_list = base_buy_order_list.order_by('-volume')
#This line here in question (I know this won't work, it's just an example)
type_buy_order_list = volume_buy_order_list.order_by('Limit' in 'type')
price_buy_orders = type_buy_order_list.order_by('-price')
buy_order_list = price_buy_orders[:15]
return buy_order_list
‘类型’的对象的属性可以是‘限制’,‘液体’或‘条件’
如图所示,该问题在于在我打算如何排序的顺序目的。我想让它,使它与下面的分级排序:
- 最高价第一
- 如果价格是一样的,有“条件”类型,然后再“限制”,然后在“液体订单“
- 如果订单的价格和类型是相同的,具有体积分类
的数值(价格,成交量)是由得心应手ORDER_BY功能轻松排序的订单,但是当涉及到字符串属性我已经停下来了。这不是一个字母顺序,所以我不能这样做。我看到,只是恼人的和低效的变通几个选项:
- 使用一个for循环来根据自己的串采取每个对象,并追加到一个列表属性
- 创建另一个属性,“TypePriority”,这是我根据订单类型的优先级分配一个数值(1,2,3)
所以我的TLDR问题是,有没有一种方法可以基于字符串值属性对非对象进行排序,字母顺序?此外,我的对象是否将我的当前模型保持为排序层次结构,还是应该以不同的方式加入order_by语句(不确定按特定属性排序是否会“排出”我刚刚创建的新对象)。
注:“_list”后缀只是为了清楚起见,我知道这不是一个列表:)
UPDATE:我的作品目前的实现是我的解决办法#1的例子,但我不知道是否有方法否则排序。
好的,所以排序是可能的。这是1部分;另一个是我如何分类“类型”部分。 “liquid”,“limit”和“conditional”值是“order”对象内的字符串,它位于“..._list”对象内。我不确定是否有这样的重新排序方法的函数,或者我是否需要找出更抽象的方法。语法/示例并链接到相关文档(如果适用)将是A + – 2014-09-25 03:02:43