2016-05-12 7 views
0

私は簡単なキーワードグループ化ツールを開発中です。DjangoグループFK byフィールド

フレーズは、検索エンジンでキーワードを表します。 SerpEntryはサイトのリンクを表します。

私はSerpEntryのURLでグループ化する方法を探しています。

ここでは私のモデルは以下のとおりです。

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''? 1つのURLは複数のフレーズを持つことができるため、意味があります。 – Flaiming

+0

SerpEntryは、URLがさまざまな位置にあり、時間の経過とともにその位置が変わるため、各フレーズでユニークです。SerpEntryのスニペットを追加しました。しかし、あなたがManyToManyでグループ化の解決策を持っているなら、あなたは歓迎です:) –

答えて

0

ないように注意してください。あなたは、Pythonでグループ化を行う必要があります。 defaultdict(list)が便利です。

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