2016-05-12 1 views
0

Я работаю над простым инструментом группировки ключевых слов.Django group FK по полю

Фраза представляет ключевое слово в поисковой системе. SerpEntry представляет ссылку на сайте.

Я ищу способ группировать фразы по URL-адресам 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 уникален для каждой фразы, потому что URL-адреса могут быть в разных положениях и менять свое положение с течением времени. Я добавил фрагмент полного 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) 

 Смежные вопросы

  • Нет связанных вопросов^_^