【问题标题】:'tuple' object has no attribute '_meta'“元组”对象没有属性“_meta”
【发布时间】:2022-01-21 02:27:04
【问题描述】:

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

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

账户模型.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'

【问题讨论】:

  • 你能分享完整的回溯吗?
  • 我刚刚在代码中添加了回溯,您可以看看@WillemVanOnsem。

标签: python django django-models django-views


【解决方案1】:

我假设您使用的是django.core.serializers。您应该传递给serializers.serialize() 的第二个参数必须是queryset,通常它是模型django 查询集的列表。

您正在这里收集您的序列化列表:

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)

这应该可以正常工作。

【讨论】:

    猜你喜欢
    • 2016-12-30
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 2019-09-25
    • 2021-08-03
    相关资源
    最近更新 更多