Django组FK by field

时间:2016-05-12 08:13:09

标签: django django-models django-orm django-aggregation

我正在开发一个简单的关键字分组工具。

短语表示搜索引擎中的关键字。 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],
]

1 个答案:

答案 0 :(得分:0)

不确定您是否可以编写一个将短语列表附加到每个条目对象的查询。您可能必须在python中进行分组。 defaultdict(list)可能会派上用场。

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