【发布时间】:2016-10-13 00:33:56
【问题描述】:
我正在尝试获取具有唯一“来源”的列表,并且所有用户都为其添加了“条款”,例如
来自:
user1 s1 [t3,t4,t5]
user1 s2 [t1,t2]
user2 s1 [t1,t2]
user2 s2 [t3,t4,t5]
到:
s1 t1,t2,t3,t4,t5
s2 t1,t2,t3,t4,t5
我的模型:
class User_Filter(models.Model):
user = models.ForeignKey(User)
source = models.ForeignKey(Source, null=True)
terms = models.ManyToManyField(Term)
class Source(models.Model):
title = models.CharField('name', max_length=100, blank=True)
url = models.URLField('url', unique=True)
class Term(models.Model):
title = models.CharField('title', max_length=100, unique=True)
我正在玩这个代码:
sources = User_Filter.objects.values('source').distinct()
这一行吐出带有源 ID 的 dict:
{'source': 1}
{'source': 2}
从这一点开始,我被困住了。非常感谢任何帮助。
丑陋的解决方案:
list = []
for s in User_Filter.objects.values('source').distinct():
objs = User_Filter.objects.all().filter(source=s['source'])
source = Source.objects.get(id=s['source']).url
source_dict = {}
terms = []
for obj in objs:
for term in obj.terms.all():
if term.title not in terms: terms.append(term.title)
source_dict['terms']=terms
source_dict['url']=source
to_scraper.append(source_dict)
print (list)
【问题讨论】:
-
您也应该在此处包含
Term和Source模型 -
添加了其他模型