Django错误:用户匹配查询不存在

时间:2020-07-30 22:58:50

标签: django django-models django-views

所以我在Django项目中有这些模型,并且我试图获取user2变量或模型的其他用户

class ThreadManager(models.Manager):
    def by_user(self, user):
        qlookup = Q(first=user) | Q(second=user)
        qlookup2 = Q(first=user) & Q(second=user)
        qs = self.get_queryset().filter(qlookup).exclude(qlookup2).distinct()
        return qs

    def get_or_new(self, user, other_username): # get_or_create
        username = user.username
        if username == other_username:
            return None
        qlookup1 = Q(first__username=username) & Q(second__username=other_username)
        qlookup2 = Q(first__username=other_username) & Q(second__username=username)
        qs = self.get_queryset().filter(qlookup1 | qlookup2).distinct()
        if qs.count() == 1:
            return qs.first(), False
        elif qs.count() > 1:
            return qs.order_by('timestamp').first(), False
        else:
            Klass = user.__class__
            user2 = Klass.objects.get(username=other_username)
            if user != user2:
                obj = self.model(first=user, second=user2)
                obj.save()
                return obj, True
            return None, False


class Thread(models.Model):
    first = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='chat_thread_first')
    second = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='chat_thread_second')
    updated = models.DateTimeField(auto_now=True)
    timestamp = models.DateTimeField(auto_now_add=True)

    objects = ThreadManager()

和我的观点

def Messages(request, *args, **kwargs):
    Chats = Thread.objects.by_user(request.user)
    other_username = kwargs.get("username")
    other_user = Thread.objects.get_or_new(request.user, other_username)
    context = {
        'content': Chats,
        'chatname': other_user
    }
    return render(request, "chat/messages.html", context)

但是当我尝试获取其他用户时,出现标题错误。有人知道发生了什么吗?

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

通过查看模型,似乎user2变量是第二个对象,要获取第二个对象,您只需要使用您创建的内容上下文,然后在模板中循环使用{%进行内容%的聊天} {{chat.second}},这将为您提供第二个用户,而不是您所有对象的用户