Python列表视图-按相同的用户和日期获取和分组表的数据

Python列表视图-按相同的用户和日期获取和分组表的数据,python,database,listview,Python,Database,Listview,你好。我正在开发web应用程序,我正在尝试编写一个列表视图,用于从数据库获取数据,从而创建一个统计表。 user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=_('user'), on_delete=models.CASCADE) created = models.DateTimeField(_('created'), auto_now_add=True, db_index=True) 我有一个名为活动的对象,其中“用户

你好。我正在开发web应用程序,我正在尝试编写一个列表视图,用于从数据库获取数据,从而创建一个统计表。

user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=_('user'), on_delete=models.CASCADE)
created = models.DateTimeField(_('created'), auto_now_add=True, db_index=True)
我有一个名为活动的对象,其中“用户”作为ForeignKey,而“创建的”作为datetime字段

在这里您可以看到我的列表视图代码:

class ActivityCountListView(LoginPermissionRequiredMixin, DisplayListViewMixin, SortingListViewMixin, ListView,):
model = Activity
permission_required = 'directory.list_activity'
displays = ['list', 'table']
paginate_values = [10, 50, 100]
paginate_by_display = {'table': paginate_values, 'list': paginate_values}
sorting_options = {'-created': _('Newest'), 'created': _('Oldest'), '-modified': _("Recently modified")}

def get_queryset(self):
    queryset = self.filter.qs.select_related('user')
    return self.sort_queryset(queryset)

def dispatch(self, request, *args, **kwargs):
    self.filter = ActivityFilter(request.user, request.GET, queryset=self.get_whole_queryset())
    return super(ActivityCountListView, self).dispatch(request, *args, **kwargs)

def get_whole_queryset(self):
    return Activity.objects.restrict_user(self.request.user)

def get_context_data(self, **kwargs):
    context_data = super(ActivityCountListView, self).get_context_data(**kwargs)
    context_data['filter'] = self.filter

    activities = Activity.objects \
        .annotate(day=ExtractDay('created'), month=ExtractMonth('created'), year=ExtractYear('created'))\
        .values('user', 'day', 'month', 'year') \
        .order_by('user')\

    data = self.get_data(activities)

    context_data.update({
        'data': data
    })

    return context_data

def get_data(self, activities):
    data = {}



    for activities_data in activities:
        print(activities_data)
        user = activities_data['user']
        day = activities_data['day']
        month = activities_data['month']
        year = activities_data['year']

        dt = datetime(year, month, day).date()
        formatted_date = str(dt)

        data.update({user: dict()})


        data[user][formatted_date] = 1


    print(data.keys())
    print(data.values())
    print(data)

    return data
{'user': 549, 'day': 24, 'month': 7, 'year': 2018}
{'user': 350, 'day': 24, 'month': 7, 'year': 2018}
{'user': 746, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 526, 'day': 31, 'month': 7, 'year': 2018}
{'user': 526, 'day': 24, 'month': 7, 'year': 2018}
{'user': 109, 'day': 24, 'month': 7, 'year': 2018}
{'user': 419, 'day': 24, 'month': 7, 'year': 2018}
dict_keys([549, 350, 746, 1, 526, 109, 419])
dict_values([{'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-31': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}])
{549: {'2018-07-24': 1}, 350: {'2018-07-24': 1}, 746: {'2018-07-31': 1}, 1: {'2018-07-24': 1}, 526: {'2018-07-24': 1}, 109: {'2018-07-24': 1}, 419: {'2018-07-24': 1}}
{'user': 1, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
1: {'2018-07-24': 2, '2018-07-31': 1,},
使用此代码,我得到如下打印响应:

class ActivityCountListView(LoginPermissionRequiredMixin, DisplayListViewMixin, SortingListViewMixin, ListView,):
model = Activity
permission_required = 'directory.list_activity'
displays = ['list', 'table']
paginate_values = [10, 50, 100]
paginate_by_display = {'table': paginate_values, 'list': paginate_values}
sorting_options = {'-created': _('Newest'), 'created': _('Oldest'), '-modified': _("Recently modified")}

def get_queryset(self):
    queryset = self.filter.qs.select_related('user')
    return self.sort_queryset(queryset)

def dispatch(self, request, *args, **kwargs):
    self.filter = ActivityFilter(request.user, request.GET, queryset=self.get_whole_queryset())
    return super(ActivityCountListView, self).dispatch(request, *args, **kwargs)

def get_whole_queryset(self):
    return Activity.objects.restrict_user(self.request.user)

def get_context_data(self, **kwargs):
    context_data = super(ActivityCountListView, self).get_context_data(**kwargs)
    context_data['filter'] = self.filter

    activities = Activity.objects \
        .annotate(day=ExtractDay('created'), month=ExtractMonth('created'), year=ExtractYear('created'))\
        .values('user', 'day', 'month', 'year') \
        .order_by('user')\

    data = self.get_data(activities)

    context_data.update({
        'data': data
    })

    return context_data

def get_data(self, activities):
    data = {}



    for activities_data in activities:
        print(activities_data)
        user = activities_data['user']
        day = activities_data['day']
        month = activities_data['month']
        year = activities_data['year']

        dt = datetime(year, month, day).date()
        formatted_date = str(dt)

        data.update({user: dict()})


        data[user][formatted_date] = 1


    print(data.keys())
    print(data.values())
    print(data)

    return data
{'user': 549, 'day': 24, 'month': 7, 'year': 2018}
{'user': 350, 'day': 24, 'month': 7, 'year': 2018}
{'user': 746, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 526, 'day': 31, 'month': 7, 'year': 2018}
{'user': 526, 'day': 24, 'month': 7, 'year': 2018}
{'user': 109, 'day': 24, 'month': 7, 'year': 2018}
{'user': 419, 'day': 24, 'month': 7, 'year': 2018}
dict_keys([549, 350, 746, 1, 526, 109, 419])
dict_values([{'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-31': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}])
{549: {'2018-07-24': 1}, 350: {'2018-07-24': 1}, 746: {'2018-07-31': 1}, 1: {'2018-07-24': 1}, 526: {'2018-07-24': 1}, 109: {'2018-07-24': 1}, 419: {'2018-07-24': 1}}
{'user': 1, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
1: {'2018-07-24': 2, '2018-07-31': 1,},
打印(活动和数据):

class ActivityCountListView(LoginPermissionRequiredMixin, DisplayListViewMixin, SortingListViewMixin, ListView,):
model = Activity
permission_required = 'directory.list_activity'
displays = ['list', 'table']
paginate_values = [10, 50, 100]
paginate_by_display = {'table': paginate_values, 'list': paginate_values}
sorting_options = {'-created': _('Newest'), 'created': _('Oldest'), '-modified': _("Recently modified")}

def get_queryset(self):
    queryset = self.filter.qs.select_related('user')
    return self.sort_queryset(queryset)

def dispatch(self, request, *args, **kwargs):
    self.filter = ActivityFilter(request.user, request.GET, queryset=self.get_whole_queryset())
    return super(ActivityCountListView, self).dispatch(request, *args, **kwargs)

def get_whole_queryset(self):
    return Activity.objects.restrict_user(self.request.user)

def get_context_data(self, **kwargs):
    context_data = super(ActivityCountListView, self).get_context_data(**kwargs)
    context_data['filter'] = self.filter

    activities = Activity.objects \
        .annotate(day=ExtractDay('created'), month=ExtractMonth('created'), year=ExtractYear('created'))\
        .values('user', 'day', 'month', 'year') \
        .order_by('user')\

    data = self.get_data(activities)

    context_data.update({
        'data': data
    })

    return context_data

def get_data(self, activities):
    data = {}



    for activities_data in activities:
        print(activities_data)
        user = activities_data['user']
        day = activities_data['day']
        month = activities_data['month']
        year = activities_data['year']

        dt = datetime(year, month, day).date()
        formatted_date = str(dt)

        data.update({user: dict()})


        data[user][formatted_date] = 1


    print(data.keys())
    print(data.values())
    print(data)

    return data
{'user': 549, 'day': 24, 'month': 7, 'year': 2018}
{'user': 350, 'day': 24, 'month': 7, 'year': 2018}
{'user': 746, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 526, 'day': 31, 'month': 7, 'year': 2018}
{'user': 526, 'day': 24, 'month': 7, 'year': 2018}
{'user': 109, 'day': 24, 'month': 7, 'year': 2018}
{'user': 419, 'day': 24, 'month': 7, 'year': 2018}
dict_keys([549, 350, 746, 1, 526, 109, 419])
dict_values([{'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-31': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}])
{549: {'2018-07-24': 1}, 350: {'2018-07-24': 1}, 746: {'2018-07-31': 1}, 1: {'2018-07-24': 1}, 526: {'2018-07-24': 1}, 109: {'2018-07-24': 1}, 419: {'2018-07-24': 1}}
{'user': 1, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
1: {'2018-07-24': 2, '2018-07-31': 1,},
打印(data.keys()):

class ActivityCountListView(LoginPermissionRequiredMixin, DisplayListViewMixin, SortingListViewMixin, ListView,):
model = Activity
permission_required = 'directory.list_activity'
displays = ['list', 'table']
paginate_values = [10, 50, 100]
paginate_by_display = {'table': paginate_values, 'list': paginate_values}
sorting_options = {'-created': _('Newest'), 'created': _('Oldest'), '-modified': _("Recently modified")}

def get_queryset(self):
    queryset = self.filter.qs.select_related('user')
    return self.sort_queryset(queryset)

def dispatch(self, request, *args, **kwargs):
    self.filter = ActivityFilter(request.user, request.GET, queryset=self.get_whole_queryset())
    return super(ActivityCountListView, self).dispatch(request, *args, **kwargs)

def get_whole_queryset(self):
    return Activity.objects.restrict_user(self.request.user)

def get_context_data(self, **kwargs):
    context_data = super(ActivityCountListView, self).get_context_data(**kwargs)
    context_data['filter'] = self.filter

    activities = Activity.objects \
        .annotate(day=ExtractDay('created'), month=ExtractMonth('created'), year=ExtractYear('created'))\
        .values('user', 'day', 'month', 'year') \
        .order_by('user')\

    data = self.get_data(activities)

    context_data.update({
        'data': data
    })

    return context_data

def get_data(self, activities):
    data = {}



    for activities_data in activities:
        print(activities_data)
        user = activities_data['user']
        day = activities_data['day']
        month = activities_data['month']
        year = activities_data['year']

        dt = datetime(year, month, day).date()
        formatted_date = str(dt)

        data.update({user: dict()})


        data[user][formatted_date] = 1


    print(data.keys())
    print(data.values())
    print(data)

    return data
{'user': 549, 'day': 24, 'month': 7, 'year': 2018}
{'user': 350, 'day': 24, 'month': 7, 'year': 2018}
{'user': 746, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 526, 'day': 31, 'month': 7, 'year': 2018}
{'user': 526, 'day': 24, 'month': 7, 'year': 2018}
{'user': 109, 'day': 24, 'month': 7, 'year': 2018}
{'user': 419, 'day': 24, 'month': 7, 'year': 2018}
dict_keys([549, 350, 746, 1, 526, 109, 419])
dict_values([{'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-31': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}])
{549: {'2018-07-24': 1}, 350: {'2018-07-24': 1}, 746: {'2018-07-31': 1}, 1: {'2018-07-24': 1}, 526: {'2018-07-24': 1}, 109: {'2018-07-24': 1}, 419: {'2018-07-24': 1}}
{'user': 1, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
1: {'2018-07-24': 2, '2018-07-31': 1,},
打印(data.values()):

class ActivityCountListView(LoginPermissionRequiredMixin, DisplayListViewMixin, SortingListViewMixin, ListView,):
model = Activity
permission_required = 'directory.list_activity'
displays = ['list', 'table']
paginate_values = [10, 50, 100]
paginate_by_display = {'table': paginate_values, 'list': paginate_values}
sorting_options = {'-created': _('Newest'), 'created': _('Oldest'), '-modified': _("Recently modified")}

def get_queryset(self):
    queryset = self.filter.qs.select_related('user')
    return self.sort_queryset(queryset)

def dispatch(self, request, *args, **kwargs):
    self.filter = ActivityFilter(request.user, request.GET, queryset=self.get_whole_queryset())
    return super(ActivityCountListView, self).dispatch(request, *args, **kwargs)

def get_whole_queryset(self):
    return Activity.objects.restrict_user(self.request.user)

def get_context_data(self, **kwargs):
    context_data = super(ActivityCountListView, self).get_context_data(**kwargs)
    context_data['filter'] = self.filter

    activities = Activity.objects \
        .annotate(day=ExtractDay('created'), month=ExtractMonth('created'), year=ExtractYear('created'))\
        .values('user', 'day', 'month', 'year') \
        .order_by('user')\

    data = self.get_data(activities)

    context_data.update({
        'data': data
    })

    return context_data

def get_data(self, activities):
    data = {}



    for activities_data in activities:
        print(activities_data)
        user = activities_data['user']
        day = activities_data['day']
        month = activities_data['month']
        year = activities_data['year']

        dt = datetime(year, month, day).date()
        formatted_date = str(dt)

        data.update({user: dict()})


        data[user][formatted_date] = 1


    print(data.keys())
    print(data.values())
    print(data)

    return data
{'user': 549, 'day': 24, 'month': 7, 'year': 2018}
{'user': 350, 'day': 24, 'month': 7, 'year': 2018}
{'user': 746, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 526, 'day': 31, 'month': 7, 'year': 2018}
{'user': 526, 'day': 24, 'month': 7, 'year': 2018}
{'user': 109, 'day': 24, 'month': 7, 'year': 2018}
{'user': 419, 'day': 24, 'month': 7, 'year': 2018}
dict_keys([549, 350, 746, 1, 526, 109, 419])
dict_values([{'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-31': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}])
{549: {'2018-07-24': 1}, 350: {'2018-07-24': 1}, 746: {'2018-07-31': 1}, 1: {'2018-07-24': 1}, 526: {'2018-07-24': 1}, 109: {'2018-07-24': 1}, 419: {'2018-07-24': 1}}
{'user': 1, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
1: {'2018-07-24': 2, '2018-07-31': 1,},
打印(数据):

class ActivityCountListView(LoginPermissionRequiredMixin, DisplayListViewMixin, SortingListViewMixin, ListView,):
model = Activity
permission_required = 'directory.list_activity'
displays = ['list', 'table']
paginate_values = [10, 50, 100]
paginate_by_display = {'table': paginate_values, 'list': paginate_values}
sorting_options = {'-created': _('Newest'), 'created': _('Oldest'), '-modified': _("Recently modified")}

def get_queryset(self):
    queryset = self.filter.qs.select_related('user')
    return self.sort_queryset(queryset)

def dispatch(self, request, *args, **kwargs):
    self.filter = ActivityFilter(request.user, request.GET, queryset=self.get_whole_queryset())
    return super(ActivityCountListView, self).dispatch(request, *args, **kwargs)

def get_whole_queryset(self):
    return Activity.objects.restrict_user(self.request.user)

def get_context_data(self, **kwargs):
    context_data = super(ActivityCountListView, self).get_context_data(**kwargs)
    context_data['filter'] = self.filter

    activities = Activity.objects \
        .annotate(day=ExtractDay('created'), month=ExtractMonth('created'), year=ExtractYear('created'))\
        .values('user', 'day', 'month', 'year') \
        .order_by('user')\

    data = self.get_data(activities)

    context_data.update({
        'data': data
    })

    return context_data

def get_data(self, activities):
    data = {}



    for activities_data in activities:
        print(activities_data)
        user = activities_data['user']
        day = activities_data['day']
        month = activities_data['month']
        year = activities_data['year']

        dt = datetime(year, month, day).date()
        formatted_date = str(dt)

        data.update({user: dict()})


        data[user][formatted_date] = 1


    print(data.keys())
    print(data.values())
    print(data)

    return data
{'user': 549, 'day': 24, 'month': 7, 'year': 2018}
{'user': 350, 'day': 24, 'month': 7, 'year': 2018}
{'user': 746, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 526, 'day': 31, 'month': 7, 'year': 2018}
{'user': 526, 'day': 24, 'month': 7, 'year': 2018}
{'user': 109, 'day': 24, 'month': 7, 'year': 2018}
{'user': 419, 'day': 24, 'month': 7, 'year': 2018}
dict_keys([549, 350, 746, 1, 526, 109, 419])
dict_values([{'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-31': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}])
{549: {'2018-07-24': 1}, 350: {'2018-07-24': 1}, 746: {'2018-07-31': 1}, 1: {'2018-07-24': 1}, 526: {'2018-07-24': 1}, 109: {'2018-07-24': 1}, 419: {'2018-07-24': 1}}
{'user': 1, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
1: {'2018-07-24': 2, '2018-07-31': 1,},
。。。但是它不像我想要的那样,因为对于同一个用户只有一个日期,并且没有活动的计数。。。我希望得到这样的回应:

{549: {'2018-07-24': 1}, 350: {'2018-07-24': 1}, 746: {'2018-07-31': 1}, 1: {'2018-07-24': 2, '2018-07-31': 1,}, 526: {'2018-07-24': 1, '2018-07-31: 1}, 109: {'2018-07-24': 1}, 419: {'2018-07-24': 1}}
为了更好地理解: 如果同一用户有多个活动(如用户id 1):

class ActivityCountListView(LoginPermissionRequiredMixin, DisplayListViewMixin, SortingListViewMixin, ListView,):
model = Activity
permission_required = 'directory.list_activity'
displays = ['list', 'table']
paginate_values = [10, 50, 100]
paginate_by_display = {'table': paginate_values, 'list': paginate_values}
sorting_options = {'-created': _('Newest'), 'created': _('Oldest'), '-modified': _("Recently modified")}

def get_queryset(self):
    queryset = self.filter.qs.select_related('user')
    return self.sort_queryset(queryset)

def dispatch(self, request, *args, **kwargs):
    self.filter = ActivityFilter(request.user, request.GET, queryset=self.get_whole_queryset())
    return super(ActivityCountListView, self).dispatch(request, *args, **kwargs)

def get_whole_queryset(self):
    return Activity.objects.restrict_user(self.request.user)

def get_context_data(self, **kwargs):
    context_data = super(ActivityCountListView, self).get_context_data(**kwargs)
    context_data['filter'] = self.filter

    activities = Activity.objects \
        .annotate(day=ExtractDay('created'), month=ExtractMonth('created'), year=ExtractYear('created'))\
        .values('user', 'day', 'month', 'year') \
        .order_by('user')\

    data = self.get_data(activities)

    context_data.update({
        'data': data
    })

    return context_data

def get_data(self, activities):
    data = {}



    for activities_data in activities:
        print(activities_data)
        user = activities_data['user']
        day = activities_data['day']
        month = activities_data['month']
        year = activities_data['year']

        dt = datetime(year, month, day).date()
        formatted_date = str(dt)

        data.update({user: dict()})


        data[user][formatted_date] = 1


    print(data.keys())
    print(data.values())
    print(data)

    return data
{'user': 549, 'day': 24, 'month': 7, 'year': 2018}
{'user': 350, 'day': 24, 'month': 7, 'year': 2018}
{'user': 746, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 526, 'day': 31, 'month': 7, 'year': 2018}
{'user': 526, 'day': 24, 'month': 7, 'year': 2018}
{'user': 109, 'day': 24, 'month': 7, 'year': 2018}
{'user': 419, 'day': 24, 'month': 7, 'year': 2018}
dict_keys([549, 350, 746, 1, 526, 109, 419])
dict_values([{'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-31': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}])
{549: {'2018-07-24': 1}, 350: {'2018-07-24': 1}, 746: {'2018-07-31': 1}, 1: {'2018-07-24': 1}, 526: {'2018-07-24': 1}, 109: {'2018-07-24': 1}, 419: {'2018-07-24': 1}}
{'user': 1, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
1: {'2018-07-24': 2, '2018-07-31': 1,},
我希望得到如下数据响应:

class ActivityCountListView(LoginPermissionRequiredMixin, DisplayListViewMixin, SortingListViewMixin, ListView,):
model = Activity
permission_required = 'directory.list_activity'
displays = ['list', 'table']
paginate_values = [10, 50, 100]
paginate_by_display = {'table': paginate_values, 'list': paginate_values}
sorting_options = {'-created': _('Newest'), 'created': _('Oldest'), '-modified': _("Recently modified")}

def get_queryset(self):
    queryset = self.filter.qs.select_related('user')
    return self.sort_queryset(queryset)

def dispatch(self, request, *args, **kwargs):
    self.filter = ActivityFilter(request.user, request.GET, queryset=self.get_whole_queryset())
    return super(ActivityCountListView, self).dispatch(request, *args, **kwargs)

def get_whole_queryset(self):
    return Activity.objects.restrict_user(self.request.user)

def get_context_data(self, **kwargs):
    context_data = super(ActivityCountListView, self).get_context_data(**kwargs)
    context_data['filter'] = self.filter

    activities = Activity.objects \
        .annotate(day=ExtractDay('created'), month=ExtractMonth('created'), year=ExtractYear('created'))\
        .values('user', 'day', 'month', 'year') \
        .order_by('user')\

    data = self.get_data(activities)

    context_data.update({
        'data': data
    })

    return context_data

def get_data(self, activities):
    data = {}



    for activities_data in activities:
        print(activities_data)
        user = activities_data['user']
        day = activities_data['day']
        month = activities_data['month']
        year = activities_data['year']

        dt = datetime(year, month, day).date()
        formatted_date = str(dt)

        data.update({user: dict()})


        data[user][formatted_date] = 1


    print(data.keys())
    print(data.values())
    print(data)

    return data
{'user': 549, 'day': 24, 'month': 7, 'year': 2018}
{'user': 350, 'day': 24, 'month': 7, 'year': 2018}
{'user': 746, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 526, 'day': 31, 'month': 7, 'year': 2018}
{'user': 526, 'day': 24, 'month': 7, 'year': 2018}
{'user': 109, 'day': 24, 'month': 7, 'year': 2018}
{'user': 419, 'day': 24, 'month': 7, 'year': 2018}
dict_keys([549, 350, 746, 1, 526, 109, 419])
dict_values([{'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-31': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}, {'2018-07-24': 1}])
{549: {'2018-07-24': 1}, 350: {'2018-07-24': 1}, 746: {'2018-07-31': 1}, 1: {'2018-07-24': 1}, 526: {'2018-07-24': 1}, 109: {'2018-07-24': 1}, 419: {'2018-07-24': 1}}
{'user': 1, 'day': 31, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
{'user': 1, 'day': 24, 'month': 7, 'year': 2018}
1: {'2018-07-24': 2, '2018-07-31': 1,},
而不是像这样的

1: {'2018-07-24': 1},

我真的不知道怎么做。如果您能帮助我,并给我写下需要更改的内容以及代码中需要添加的内容,我将非常高兴非常感谢

使用
itertools.groupby

>>> activities_lst = [{'user': 549, 'day': 24, 'month': 7, 'year': 2018}, {'user': 350, 'day': 24, 'month': 7, 'year': 2018}, {'user': 746, 'day': 31, 'month': 7, 'year': 2018}, {'user': 1, 'day': 31, 'month': 7, 'year': 2018}, {'user': 1, 'day': 24, 'month': 7, 'year': 2018}, {'user': 1, 'day': 24, 'month': 7, 'year': 2018}, {'user': 526, 'day': 31, 'month': 7, 'year': 2018}, {'user': 526, 'day': 24, 'month': 7, 'year': 2018}, {'user': 109, 'day': 24, 'month': 7, 'year': 2018}, {'user': 419, 'day': 24, 'month': 7, 'year': 2018}]
>>>
>>> from itertools import groupby
>>> f = lambda x: x['user']
>>> res = {user:['{year}-{month:02}-{day}'.format(**date) for date in date_lst] for user,date_lst in groupby(sorted(activities_lst, key=f), f)}
>>> res = {user:{date:len(list(v)) for date,v in groupby(date_lst)} for user,date_lst in res.items()}
>>> 
>>> from pprint import pprint
>>> pprint(res)
{1: {'2018-07-24': 2, '2018-07-31': 1},
 109: {'2018-07-24': 1},
 350: {'2018-07-24': 1},
 419: {'2018-07-24': 1},
 526: {'2018-07-24': 1, '2018-07-31': 1},
 549: {'2018-07-24': 1},
 746: {'2018-07-31': 1}}

看来问题出在get_data()调用中

代替这个

data[user][formatted_date] = 1
可能需要写如下

if formatted_date in data[user]:
   data[user][formatted_date] += 1
else
   data[user][formatted_date] = 1