Извинения за запутанный заголовок.
По сути - я просматриваю серию объектов-моделей, извлекая дату и название рынка, чтобы подготовиться к графику.
В настоящее время мой метод выглядит следующим образом
def getData():
projects = Opportunity.objects.all()
markets = []
total = {
'marketname': "Total",
'data': []
}
for x in projects:
d = datetime.date(x.datecreated).strftime('%b-%Y')
keytotaldate = ""
keydate = ""
market = x.market.all()[0].marketname
# Check to see if market exists in list
if not any(c.get('marketname', None) == market for c in markets):
newobj = {
'marketname': market,
'data': []
}
newdateobj = {
'date': d,
'count': 1
}
newobj['data'].append(newdateobj)
markets.append(newobj)
keytotaldate = next((s for s in total['data'] if s['date'] == d), None)
if keytotaldate is not None:
keytotaldate['count'] += 1
else:
newtotaldateobj = {
'date': d,
'count': 1
}
total['data'].append(newtotaldateobj)
else:
keymarket = None
keydate = None
for n in markets:
if n['marketname'] == market:
keymarket = n
break
for t in markets:
for m in t['data']:
if m['date'] == d:
m['count'] += 1
keydate = m
break
if keydate is None:
newdateobj = {
'date': d,
'count': 1
}
newobj['data'].append(newdateobj)
keytotaldate = next((u for u in total['data'] if u['date'] == d), None)
if keytotaldate is not None:
keytotaldate['count'] += 1
else:
newtotaldateobj = {
'date': d,
'count': 1
}
total['data'].append(newtotaldateobj)
markets.append(total)
return markets
Однако, когда я возвращаюсь на рынки, я получаю дубликаты, которые выглядят примерно так:
{'marketname': 'Washington D.C.', 'data': [
{'date': 'Feb-2019', 'count': 54},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Feb-2019', 'count': 1},
{'date': 'Mar-2019', 'count': 1},
{'date': 'Mar-2019', 'count': 1},
{'date': 'Mar-2019', 'count': 1},
{'date': 'Mar-2019', 'count': 1},
{'date': 'Mar-2019', 'count': 1},
{'date': 'Mar-2019', 'count': 1},
{'date': 'Mar-2019', 'count': 1},
{'date': 'Mar-2019', 'count': 1},
{'date': 'Mar-2019', 'count': 1},
{'date': 'Mar-2019', 'count': 1},
{'date': 'Mar-2019', 'count': 1},
{'date': 'Mar-2019', 'count': 1},
{'date': 'Mar-2019', 'count': 1},
{'date': 'Mar-2019', 'count': 1},
{'date': 'Mar-2019', 'count': 1},
{'date': 'Mar-2019', 'count': 1},
{'date': 'Mar-2019', 'count': 1},
{'date': 'Mar-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'Apr-2019', 'count': 1},
{'date': 'May-2019', 'count': 1},
{'date': 'May-2019', 'count': 1},
{'date': 'May-2019', 'count': 1},
{'date': 'May-2019', 'count': 1},
{'date': 'May-2019', 'count': 1},
{'date': 'May-2019', 'count': 1},
{'date': 'May-2019', 'count': 1},
{'date': 'May-2019', 'count': 1},
{'date': 'May-2019', 'count': 1},
{'date': 'May-2019', 'count': 1},
{'date': 'May-2019', 'count': 1},
{'date': 'May-2019', 'count': 1},
{'date': 'May-2019', 'count': 1},
{'date': 'May-2019', 'count': 1},
{'date': 'May-2019', 'count': 1},
{'date': 'Jun-2019', 'count': 1},
{'date': 'Jun-2019', 'count': 1},
{'date': 'Jun-2019', 'count': 1},
{'date': 'Jun-2019', 'count': 1},
{'date': 'Jun-2019', 'count': 1},
{'date': 'Jun-2019', 'count': 1},
{'date': 'Jun-2019', 'count': 1},
{'date': 'Jun-2019', 'count': 1},
{'date': 'Jun-2019', 'count': 1},
{'date': 'Jun-2019', 'count': 1},
{'date': 'Jun-2019', 'count': 1},
{'date': 'Jun-2019', 'count': 1},
{'date': 'Jun-2019', 'count': 1},
{'date': 'Jun-2019', 'count': 1},
{'date': 'Jun-2019', 'count': 1},
{'date': 'Jun-2019', 'count': 1},
{'date': 'Jun-2019', 'count': 1},
{'date': 'Jun-2019', 'count': 1},
{'date': 'Jun-2019', 'count': 1},
]},
Окончательный список должен выглядеть следующим образом:
[
{
'marketname': 'Chicago',
'data':
[
{
'date': 'Jun-2019',
'count': 3
},
{
'date': 'Jul-2019',
'count': 1
}
]
},
{
'marketname': 'New York',
'data':
[
{
'date': 'Jun-2019',
'count': 2
},
{
'date': 'Jul-2019',
'count': 5
}
]
},
]
Спасибо за уделенное время !!