Django模型:如何在我的视图中获取模型对象

2024-09-30 10:40:03 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有这个模型

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)
    thread_notification = models.IntegerField(default=0)
    
    objects      = ThreadManager()

在我的模型线程中,我希望得到对象线程的通知,所以我的视图如下

def new_notification_thread(request):
    thread_notifier = Thread.objects.filter(pk=1)
    thread_notifier.thread_notification += 1
    thread_notifier.save()

    return JsonResponse(serializers.serialize('json', [thread_notifier]), safe=False)

问题是当我运行代码时

Thread matching query does not exist.

有人知道发生了什么事吗


Tags: selffalsegetreturnmodelsusernamethreadnotifier
1条回答
网友
1楼 · 发布于 2024-09-30 10:40:03
thread_notifier = Thread.objects.filter(pk=1)

出现此错误是因为与id=1关联的项目不存在/已删除。因此,当您尝试访问不存在的项目时,会显示错误。尝试访问现有id,您应该可以继续

好的,不要使用filter方法来避免F()表达式。而是执行以下操作:

thread_notifier = Thread.objects.get(pk=1)

它不会给你查询集,所以你可以直接访问所有属性。 下面是:

thread_notifier.thread_notification += 1
thread_notifier.save()

但当项目超过1个时,必须使用筛选方法。

相关问题 更多 >

    热门问题