2013-07-23 40 views
1

我有不同的模型,所有模型都有一個名爲'date_created'的'DateTimeField'。我需要從所有模型中選擇所有對象,按照'date_created'這個字段對它們進行排序並作爲列表返回。通過對象的date_created屬性對不同模型的查詢集對象列表進行排序

我曾嘗試以下:

models.py

class FirstModel(models.Model): 
    title = models.CharField(max_length=100) 
    date_created = models.DateTimeField() 


class SecondModel(models.Model): 
    title = models.CharField(max_length=100) 
    date_created = models.DateTimeField() 

views.py

def browse(request): 
    object_list = [] 
    for model in get_models(get_app('myapp')): 
     object_list.append(model.objects.order_by('-date_created').all()) 
    object_list = sorted(object_list, key=attrgetter('date_created')) 
    context = {'data': object_list} 
    return render(request, 'myapp/browse.html', context) 

我得到的錯誤 '查詢集' 對象有沒有屬性 'DATE_CREATED'。

這些模型有其他領域與此問題無關。我可以使用一個通用的基類來獲取所有對象(我想),但由於某種原因我使用了抽象基類。我懷疑'連接'可以使用,但我不知道如何做到這一點。

那麼,如何通過date_created屬性來對這個object_list(這是來自不同模型的對象列表)進行排序呢?

回答

3

我找到了一些更多研究的答案。

的問題是在這條線:

object_list.append(model.objects.order_by('-date_created').all()) 

雖然我使用「追加」,它是作爲一個正常的列表,而不是查詢集對象的列表{我有點不確定這個處理,基本上這一行給了我一個列表,我只需要列出所有queryset對象。 }更正此chain()從itertools可以通過導入鏈和替換上面的行一起使用,如下所示:

from itertools import chain 
... 
... 
object_list = chain(object_list, (model.objects.order_by('-date_created').all())) 
... 

休息一切都很好。另外,正如其指出的那樣,可以使用multi table inheritence,它可以通過使用order_by

1

我想你應該與此代碼替換此代碼

object_list.append(model.objects.order_by('-date_created').all()) 

object_list.append(model.objects.all().order_by('-date_created')) 

而且我覺得你不需要使用此代碼

object_list = sorted(object_list, key=attrgetter('date_created')) 

因爲你已排序已使用「order by」

+0

得到所有結果在一個查詢中排序。其實,你所講的會讓我從不同的模型中排序列表,但我需要排序最終列表即所有單獨排序的模型對象列表的組合。 –

相關問題