我正在编写一个脚本,我想从访问过的网站中获取每次出现的值。
首先我访问了网站:
sd = SessionData.objects.filter(session_id__mlsession__platform__exact=int('2'))
result = sd.values('last_page')
然后我得到我期望的值:
[{'last_page': 10L}, {'last_page': 4L}, {'last_page': 10L}]
这样,我希望以 10L 作为 id 的页面的权重是 4L 的两倍,因为它出现了两次。
我尝试从列表中获取值:
wordData = KeywordData.objects.filter(page_id__in=result)
但后来我只得到唯一的值:
[<KeywordData: 23>, <KeywordData: 24>, <KeywordData: 8>]
我想要的结果是:
[<KeywordData: 23>, <KeywordData: 24>, <KeywordData: 8>, <KeywordData: 23>, <KeywordData: 24>]
我设法不获得唯一列表的唯一方法是遍历 for 循环,但这并不是一个真正的选择,因为我正在处理的数据有数百万个条目。
django 中的“__in”过滤器是否只返回唯一条目?有没有办法让我以“django”方式获得正确的输出?
预先感谢您的帮助!
编辑:相关模型:
class KeywordData(models.Model):
page = models.ForeignKey(Page, db_column='page_id', related_name='page_pageid', default=None)
site = models.ForeignKey(Page, db_column='site_id', related_name='page_siteid', default=None)
keywords = models.CharField(max_length=255, blank=True, null=True, default=None)
class MLSession(models.Model):
session = models.ForeignKey(Session, null=True, db_column='session_id')
platform = models.IntegerField(choices=PLATFORM_CHOICE)
visitor_type = models.IntegerField(default=1)
class SessionData(models.Model):
session = models.ForeignKey(Session, db_column='session_id', on_delete=models.CASCADE)
site = models.ForeignKey(Site, db_column='site_id', db_index=True, default=None, null=True)
last_page = models.ForeignKey(Page, db_column='last_page_id', default=None, null=True, related_name='session_last_page')
first_page = models.ForeignKey(Page, db_column='first_page_id', default=None, null=True, related_name='session_first_page')
表 Session 和 Page 仅根据它们的 ID 引用,这些 ID 是自动递增的。
我想查看 session 的最后一页,因此只接受 last_page_id,并从相应页面获取关键字。如果同一页经常是最后一页,我想增加更多权重,如前所述。
如果需要更多信息,请告诉我,再次感谢!
最佳答案
Is the "__in" filter in django made to only return unique entries?
Django 中的 __in
过滤器直接映射到 SQL 中的 IN
条件,其行为正如您所观察到的那样。
如果您想要重复的行,您应该将查询重新构造为 SQL JOIN
。你没有发布你的模型,所以我不得不在这里猜测,但下面的 Django 查询应该给你你想要的:
KeywordData.objects.filter(page__session_last_page__session_id__mlsession__platform=2)
关于python - 从 Django 查询中获取非唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45680108/