Django 1.6型号。经理向unp抱怨许多值

2024-05-19 12:03:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在model.manager中使用kwargfield='unanswered=True',但它抱怨要解包的值太多。不明白为什么要这么做

模特经理:

class ListAllObjectsManager(models.Manager):
    def date_search_threads(self, date1, date2, **kwargs):
        print kwargs["field"]
        date1 = datetime.datetime.strptime(date1, "%m-%d-%Y").date()
        date2 = datetime.datetime.strptime(date2, "%m-%d-%Y").date()
        date2 = date2 + datetime.timedelta(days=1)
        return super(ListAllObjectsManager, self).get_queryset().filter(
                kwargs["field"], **{'{}__range'.format(
                    kwargs["column"]): (date1, date2)})

查看:

class StatisticsView(LoginRequiredMixin, TemplateView):
    template_name = 'bot_data/stats.html'

    def get_context_data(self, **kwargs):
        date1 = self.request.GET.get('search')
        date2 = self.request.GET.get('search_extra')
        if not date1 or not date2:
            date1 = "12-01-1999"
            date2 = "12-01-2050"
        context['unanswered_threads'] = ThreadVault.list_all_threads \
                .date_search_threads(date1, date2, field='unanswered=True',
                column="latest_post_date").count()
        return context

Tags: selftruefieldsearchgetdatetimedatecontext
1条回答
网友
1楼 · 发布于 2024-05-19 12:03:03

我想这是因为kwargs["field"]只是一个字符串。试试看

def date_search_threads(self, date1, date2, **kwargs):
    print kwargs["field"]
    date1 = datetime.datetime.strptime(date1, "%m-%d-%Y").date()
    date2 = datetime.datetime.strptime(date2, "%m-%d-%Y").date()
    date2 = date2 + datetime.timedelta(days=1)

    param_filter = {'{}__range'.format(kwargs["column"]): (date1, date2)}
    if 'field' in kwargs:
        field = kwargs['field'].split('=')  
        param_filter[field[0]] = field[1]
    return super(ListAllObjectsManager, self).get_queryset().filter(**param_filter))

或者更好的方法是,直接用夸尔格语传递口述:

...
context['unanswered_threads'] = ThreadVault.list_all_threads \
        .date_search_threads(date1, date2, field={'unanswered': True},
        column="latest_post_date").count()

以及

...
param_filter = {'{}__range'.format(kwargs["column"]): (date1, date2)}
param_filter.update(kwargs.get('field', {})
return super(ListAllObjectsManager, self).get_queryset().filter(**param_filter))

相关问题 更多 >

    热门问题