'tuple' 对象没有属性“_meta”

'tuple' object has no attribute '_meta'

为什么每当我搜索 post 下方的帐户对象的后端时,我的查询集都会抛出此错误并添加了回溯?

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})

帐号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)

好友列表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)

这应该可以正常工作。