Объект 'tuple' не имеет атрибута '_meta'

Почему мой набор запросов выдает эту ошибку всякий раз, когда я выполняю поиск в бэкенде объекта учетной записи Ниже в посте я добавил трассировку?

def auto_search(request):
    user = request.user
    search_query = request.GET.get('q')
    payload = []
    if search_query :
        search_results = Account.objects.filter(email__icontains=search_query).filter(username__icontains=search_query).distinct()
        user = request.user
        if user.is_authenticated:
            # get the authenticated users friend list
            auth_user_friend_list = FriendList.objects.get(user=user)
            for account in search_results:
                payload.append((account, auth_user_friend_list.is_mutual_friend(account)))
                
        payload = serializers.serialize('json',payload)       
        return JsonResponse({'status':200 , 'data':payload})

Account model.py

class Account(AbstractBaseUser):
    email = models.EmailField(unique=True)
    username = models.CharField(max_length=150, unique=True)
    first_name = models.CharField(max_length=150,blank=True)
    profile_image = models.ImageField(max_length=255,upload_to=get_profile_image_filepath, null=True, blank=True, default=get_default_profile_image)
    last_name = models.CharField(max_length=150,blank=True)
    phone_number = models.CharField(max_length=50, unique=True)
    date_of_birth = models.DateField(blank=True, null=True)

friendlist models.py

class FriendList(models.Model):
    user                = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="user")
    friends             = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, related_name="friends") 
    
    # set up the reverse relation to GenericForeignKey
    
    notifications       = GenericRelation(Notification)

Ниже приводится трассировка

Traceback (most recent call last):
  File "C:\Users\Umar\Desktop\dreams\env\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "C:\Users\Umar\Desktop\dreams\env\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\Umar\Desktop\dreams\game\views.py", line 35, in auto_search
    payload = serializers.serialize('json',payload)
  File "C:\Users\Umar\Desktop\dreams\env\lib\site-packages\django\core\serializers\__init__.py", line 129, in serialize
    s.serialize(queryset, **options)
  File "C:\Users\Umar\Desktop\dreams\env\lib\site-packages\django\core\serializers\base.py", line 94, in serialize
    concrete_model = obj._meta.concrete_model
AttributeError: 'tuple' object has no attribute '_meta'

Я предполагаю, что вы используете django.core.serializers. Второй аргумент, который вы должны передать в serializers.serialize(), должен быть queryset, обычно это список моделей django queryset.

Здесь вы собираете свой список для сериализации:

payload.append((account, auth_user_friend_list.is_mutual_friend(account)))

Таким образом, каждый элемент вашего списка является кортежем, который не может быть сериализован. Не совсем понятно, что именно вы собираетесь делать. Но если вам нужен список счетов и FriendList имеет подходящий метод is_mutual_friend, вы можете захотеть что-то вроде этого:

            for account in search_results:
                if auth_user_friend_list.is_mutual_friend(account):
                    payload.append(account)

Это должно работать правильно.

Вернуться на верх