首页 > 解决方案 > 字段 'id' 需要一个数字,但得到了.list 值

问题描述

我正在尝试使用键值获取会话购物车,但出现如下错误:TypeError: Field 'id' expected a number but got ['3', '2', '4', '6', '8']。“获取 /book/cart/HTTP/1.1” 500 134321

我需要改变的:

models.py

class Book(models.Model):
    Books_cond_choice = (
        ('Old Book', 'Old'),
        ('New Book', 'New'),
    )

    book_id = models.AutoField
    book_condition = models.CharField(max_length=10, choices=Books_cond_choice)
    book_name = models.CharField(max_length=200)
    price = models.IntegerField(default=0)
    book_auther = models.CharField(max_length=200)
    pub_date = models.DateField()
    category = models.CharField(max_length=50, default="")
    subcategory = models.CharField(max_length=50, default="")
    pagecount = models.IntegerField(default=0)
    desc = models.CharField(max_length=300)
    image = models.ImageField(upload_to='book/images', default="")


    def __str__(self):
        return self.book_name

    @staticmethod
    def get_books_by_id(id):
        return int(Book.objects.filter(id__in = [id]))

views.py

class Cart(View):
    def get(self, request):
        ids = list(request.session.get('cart').keys())
        books = Book.get_books_by_id(ids)
        print(books)
        return render(request, 'book/cart.html', {'books' : books})

标签: pythondjango

解决方案


list()已经Cart.get()返回了一个列表,因此您可以按原样将其传递给过滤器。
我建议重命名它,所以在函数中你会看到它是一个列表

def get_books_by_id(ids_list):
    return int(Book.objects.filter(id__in = ids_list))

推荐阅读