2016-05-12 115 views
0

我正在研究一個簡單的關鍵字分組工具。Django group FK by field

短語代表搜索引擎中的關鍵字。 SerpEntry表示現場鏈接。

我正在尋找一種將SerpEntry網址的短語分組的方法。

這裏是我的模型:

class Phrase(models.Model): 
    text = models.CharField(max_length=1000, unique=True) 

class SerpEntry(models.Model): 
    phrase = models.ForeignKey(Phrase, related_name='serp_entry') 
    position = models.PositiveIntegerField() 
    url = models.TextField(max_length=2000) 
    title = models.CharField(max_length=1000) 
    snippet = models.TextField() 
    created_at = models.DateTimeField(auto_now_add=True) 

你有關於如何做到這一點有什麼建議?結果

的例子,我想實現:

urls = [ 
    'url1': [phrase1,phrase2,phrase3], 
    'url2': [phrase2,phrase4,phrase5], 
] 
+0

豈不是更好地使用[''ManyToMany''(https://docs.djangoproject.com/en/1.9/topics/db/examples/many_to_many/)的關係,而不是隻''ForeignKey''?一個URL可以有多個短語,所以它是有道理的。 – Flaiming

+0

SerpEntry對於每個短語都是獨一無二的,因爲網址可以處於不同的位置並隨着時間的推移改變其位置。我添加了完整SerpEntry的片段。但如果你有與ManyToMany分組的解決方案,歡迎您:) –

回答

0

不知道,你可以寫,重視短語,每個條目對象的列表的查詢。你可能不得不在python中進行分組。 A defaultdict(list)可能派上用場。像

urls = defaultdict(list) 
for entry in grab_all_entries.filter().select_related('phrase'): 
    urls[entry.url].append(phrase)