Django говорит: слишком много значений для распаковки (ожидалось 2)

Я использую Django. В функции upload_book я генерирую 10-значный код для каждой книги и идентифицирую и отличаю две книги друг от друга по их коду, а не по первичному ключу. Однако в функции generate_code я получаю ошибку:

ValueError at /main/upload_book/
too many values to unpack (expected 2)

Вот функция generate_code() с необходимыми импортами:

import random, string
def generate_code(max_length):
    code = ''.join(random.choices(string.ascii_letters + string.digits, k=max_length))
    while len(Book.objects.filter(code)) != 0:
        code = ''.join(random.choices(string.ascii_letters + string.digits, k=max_length))
    return code

Я сделал там дополнительный шаг, чтобы две книги не оказались с одинаковым кодом, какой бы низкой ни была вероятность этого при 629 возможных комбинациях. А вот моя функция upload_book():

@login_required
def upload_book(request):
    if request.method == 'POST':
        title = request.POST.get('title')
        description = request.POST.get('description')
        author = request.POST.get('author')
        code = generate_code(10)
        owner = request.user
        if 'thumbnail' in request.FILES:
            thumbnail = request.FILES['thumbnail']
        book = Book(title=title, description=description, author=author, thumbnail=thumbnail, owner=owner, code=code)
        book.save()
        return redirect("/main/all_books/")
    else:
        return render(request, 'main/upload_book.html')

И моя Book модель в models.py:

class Book(models.Model):
    title = models.CharField(max_length=1000, blank=True)
    owner = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True)
    description = models.TextField()
    author = models.CharField(max_length=1000, blank=True, null=True)
    thumbnail = models.ImageField(upload_to='book_thumbnails', blank=True)
    creation_date = models.DateTimeField(default=timezone.now)
    status = IntegerField(default=1)
    min_age = models.IntegerField(blank=True, null=True)
    max_age = models.IntegerField(blank=True, null=True)
    code = models.CharField(blank=True, null=True, max_length=10)
    community = models.ForeignKey(Community, blank=True, null=True, on_delete=models.CASCADE)
    def __str__(self):
        return self.title

Ошибка находится в этой строке функции upload_book():

code = generate_code(10) 

Что приводит к этой строке в функции generate_code():

while len(Book.objects.filter(code)) != 0: 

Вот ошибка с ее трассировкой:

Internal Server Error: /main/upload_book/
Traceback (most recent call last):
  File "/opt/homebrew/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/opt/homebrew/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/opt/homebrew/lib/python3.9/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/Users/adithraghav/Documents/Work/centel/books/main/views.py", line 101, in upload_book
    code = generate_code(10)
  File "/Users/adithraghav/Documents/Work/centel/books/main/views.py", line 24, in generate_code
    while len(Book.objects.filter(code)) != 0:
  File "/opt/homebrew/lib/python3.9/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/opt/homebrew/lib/python3.9/site-packages/django/db/models/query.py", line 941, in filter
    return self._filter_or_exclude(False, args, kwargs)
  File "/opt/homebrew/lib/python3.9/site-packages/django/db/models/query.py", line 961, in _filter_or_exclude
    clone._filter_or_exclude_inplace(negate, args, kwargs)
  File "/opt/homebrew/lib/python3.9/site-packages/django/db/models/query.py", line 968, in _filter_or_exclude_inplace
    self._query.add_q(Q(*args, **kwargs))
  File "/opt/homebrew/lib/python3.9/site-packages/django/db/models/sql/query.py", line 1393, in add_q
    clause, _ = self._add_q(q_object, self.used_aliases)
  File "/opt/homebrew/lib/python3.9/site-packages/django/db/models/sql/query.py", line 1412, in _add_q
    child_clause, needed_inner = self.build_filter(
  File "/opt/homebrew/lib/python3.9/site-packages/django/db/models/sql/query.py", line 1283, in build_filter
    arg, value = filter_expr
ValueError: too many values to unpack (expected 2)

Я не знаю, почему это происходит. В другом вопросе в принятом ответе упоминалось, что это происходит, когда используется split(), который возвращает более двух элементов. Я объединяю элементы списка, который генерируется с помощью random.choices(string.ascii_letters + string.digits, k=max_length) в строку. Когда я печатаю ''.join(random.choices(string.ascii_letters + string.digits, k=max_length)) в оболочке Python IDLE, она возвращает строку, все в порядке. Так в чем же здесь проблема?

Когда вы используете метод filter() на объектах модели, вы должны передать и имя файла

Измените эту строку

while len(Book.objects.filter(code)) != 0:

to

while Book.objects.filter(code=code) != 0:
Вернуться на верх