【问题标题】:Django group FK by fieldDjango 按字段分组 FK
【发布时间】:2016-09-07 22:32:59
【问题描述】:

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

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

【问题讨论】:

  • 使用ManyToMany 关系而不是仅使用ForeignKey 不是更好吗?一个 URL 可以有多个短语,所以这是有道理的。
  • 每个短语的 SerpEntry 都是唯一的,因为 url 可以在不同的位置并随着时间的推移改变它们的位置。我添加了完整 SerpEntry 的 sn-p。但是,如果您有使用 ManyToMany 分组的解决方案,欢迎您:)

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-01-16
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    相关资源
    最近更新 更多