1

I want to paginate invoices from Stripe

@login_required
def invoice_list(request):
    customer = stripe.Customer.list(email=request.user.username)
    for invoice_search in customer['data']:
        customer_invoice_list = stripe.Invoice.list(customer=invoice_search['id'])
    page = request.GET.get("page", 1)
    paginator = Paginator(customer_invoice_list, 20)

    try:
        invoices = paginator.page(page)
    except PageNotAnInteger:
        invoices = paginator.page(1)
    except EmptyPage:
        invoices = paginator.page(paginator.num_pages)

    context = {
        'invoices': invoices,
    }
    return render(request, 'invoice_list.html', context)

That is my code, I got error: Unhashable type

In Django 1.11 documentation say can load list or queryset, I obtain Invoices List, why can't paginate??

2 Answers2

1

Try Convert this to a tuple before creating the pagination object. please note i have not tested this myself - possible you're having the same issue as this person was - Pagination doesn't accept dict as data - unhashable type

    @login_required
def invoice_list(request):
    customer = stripe.Customer.list(email=request.user.username)
    for invoice_search in customer['data']:
        customer_invoice_list = stripe.Invoice.list(customer=invoice_search['id'])
    page = request.GET.get("page", 1)
    customer_invoice_list = tuple(customer_invoice_list)
    page = tuple(page)
    paginator = Paginator(customer_invoice_list, 20)

    try:
        invoices = paginator.page(page)
    except PageNotAnInteger:
        invoices = paginator.page(1)
    except EmptyPage:
        invoices = paginator.page(paginator.num_pages)

    context = {
        'invoices': invoices,
    }
    return render(request, 'invoice_list.html', context)
0

The soution is based on @Taylor code:

@login_required
def invoice_list(request):
    customer = stripe.Customer.list(email=request.user.username)
    for invoice_search in customer['data']:
        customer_invoice_list = stripe.Invoice.list(customer=invoice_search['id'])
    page = request.GET.get("page", 1)
    customer_invoice_list = tuple(customer_invoice_list)
    paginator = Paginator(customer_invoice_list, 20)

    try:
        invoices = paginator.page(page)
    except PageNotAnInteger:
        invoices = paginator.page(1)
    except EmptyPage:
        invoices = paginator.page(paginator.num_pages)

    context = {
        'invoices': invoices,
    }
    return render(request, 'invoice_list.html', context)