Python Django 1.6模型。管理器抱怨要解包的值太多

Python Django 1.6模型。管理器抱怨要解包的值太多,python,django,Python,Django,我试图在我的model.manager中使用kwargfield='unanswered=True',但它抱怨要解包的值太多。不明白为什么,怎么办 模型管理器: class ListAllObjectsManager(models.Manager): def date_search_threads(self, date1, date2, **kwargs): print kwargs["field"] date1 = datetime.datetime.s

我试图在我的model.manager中使用kwarg
field='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)})
视图:


我想这是因为
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))
或者更好,直接用kwargs传递口述:

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

...
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))