2017-07-24 21 views
0

我有這樣一個模型:過濾器最新的文本輸入,並分析它到列表中的Django

class TrademarkModel(models.Model): 
    description = models.TextField(null=True) 
    created = models.DateTimeField(auto_now_add=True) 

    class Meta: 
     ordering = ("-created",) 

我wan't到filter最新description進入,我想它解析成列表,所以我可以運行該列表對xml並做一些額外的計數。 我在做這樣的事情

result = TrademarkModel.objects.values() 
list_values = [entry for entry in result] 
return list_values 

和結果我有這樣的:

[{'created': datetime.datetime(2017, 7, 24, 11, 58, 14, 30162, tzinfo=<UTC>), 
    u'id': 6, 
    'description': u'c'}, 
{'created': datetime.datetime(2017, 7, 24, 11, 57, 22, 674450, tzinfo=<UTC>), 
    u'id': 5, 
    'description': u'Test'}, 
{'created': datetime.datetime(2017, 7, 24, 11, 55, 14, 376727, tzinfo=<UTC>), 
    u'id': 4, 
    'description': u'Test'}, 
{'created': datetime.datetime(2017, 7, 24, 11, 32, 31, 4703, tzinfo=<UTC>), 
    u'id': 3, 
    'description': u'Non Building materials'}, 
{'created': datetime.datetime(2017, 7, 24, 11, 31, 35, 244154, tzinfo=<UTC>), 
    u'id': 2, 
    'description': u'Testing'}, 
{'created': datetime.datetime(2017, 7, 24, 7, 20, 29, 920155, tzinfo=<UTC>), 
    u'id': 1, 
    'description': u'Testing'}] 

這是不理想的,因爲我需要做的list_values額外的解析,這樣我就可以獲取最新條目。

我的問題是什麼是從description提取最新的條目,並將其解析到列表的最優雅的方式?

+1

你大概可以使用[圖](https://docs.python.org/2/library/functions.html#map)功能。 [python tips](http://book.pythontips.com/en/latest/map_filter.html)有很多關於如何使用它的好例子。 –

+0

@JosieThompson不錯的建議,但我會用它之後我提取最新的'description'條目。 – PetarP

+1

確實與你問[這裏](https://stackoverflow.com/a/17586034/4661269)的幫助? –

回答

1

有人建議,如果我想篩選出description我需要使用values_list,這也返回從數據庫中的所有條目,但是這對於例如

TrademarkModel.objects.all().values_list('description', flat=True).latest('created') 

是隻返回從數據庫中的最新條目,所以現在我可以解析它到列表中。

1

如果我理解正確,你想做什麼,你也可以在理論上這樣做

max(TrademarkModel.objects.values(), key=lambda d: d['created'])['description']

利用內建max功能key關鍵字參數按日期排序,然後抓住description.雖然我對django完全不熟悉,但是我偏向於這個意義。我不知道values_list().latest()有時會比較。我沒有測試此代碼雖然...

+0

有趣,注意,我就玩這個,並比較了兩下,從我的回答這個例子是純粹的Django的,但我仍然可以過用這個 – PetarP