Аргумент типа 'QuerySet' не повторяется Django ошибка - PullRequest
0 голосов
/ 03 апреля 2020

В моем веб-приложении есть функция друзей, но одно из утверждений if выдает ошибку

Вот моя модель UserProfileInfo

class UserProfileInfo(models.Model):
    connection = models.ManyToManyField(User,blank=True,related_name='follow_profile')

А теперь вот мое мнение:

def friend_actions(request,username=None):
    current_user = request.user.userprofileinfo
    user = request.user
    # username = get("username")
    username = User.objects.get(username=username)
    other_user = get_object_or_404(UserProfileInfo,user__username=username)
    # other_user = UserProfileInfo.objects.get(username=username)
    url = other_user.get_absolute_url()
    if other_user in current_user.connection.all():
        current_user.connection.remove(other_user)
    else:
        current_user.connection.add(other_user)
    return HttpResponseRedirect(url)

Однако это приводит к следующей ошибке:

Аргумент типа 'QuerySet' не повторяется

Полная трассировка

Traceback:

File "C:\Users\User\.virtualenvs\interests-site-Ho6yLlHE\lib\site-packages\django\core\handlers\exception.py" in inner
  34.             response = get_response(request)

File "C:\Users\User\.virtualenvs\interests-site-Ho6yLlHE\lib\site-packages\django\core\handlers\base.py" in _get_response
  115.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\User\.virtualenvs\interests-site-Ho6yLlHE\lib\site-packages\django\core\handlers\base.py" in _get_response
  113.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\User\interests-site\interests-drf\mainapp\views.py" in friend_actions
  453.     if other_user in current_user.connection.all():

Exception Type: TypeError at /mainapp/profile/donnellan0007/connect/
Exception Value: argument of type 'QuerySet' is not iterable

Мне интересно, как я могу предотвратить возникновение этой ошибки. Я был в тупике весь день

1 Ответ

1 голос
/ 03 апреля 2020

Кажется, что это ошибка, показывающая, что время от времени она называется Heisenbug!

QuerySet действительно является повторяемым (https://github.com/django/django/blob/master/django/db/models/query.py#L271)

Django Форум имеет некоторую информацию об этом -

https://code.djangoproject.com/ticket/26600 https://github.com/PyCQA/pylint-django/issues/117

В целом, проблема, кажется, из-за исключения (кроме StopIteration) выбрасывается в iter .

Вы можете использовать один из следующих маршрутов -

  1. Принудительно задать Queryset в список ( Не рекомендуется)

  2. Фильтр соединений с использованием условия. В вашем случае ищите other_user в соединении, используя фильтр

  3. Верните список значений вместо Queryset и выполните 'in' для этого.

...