为什么这两个 Django 模型对象的 VSCode 智能感知类型提示不同?
Why is VSCode intellisense type hints different for these 2 Django model objects?
在导入 Video
模型后的 views.py
中,我正在测试智能感知在 VScode 中的工作方式。
这是views.py
from django.shortcuts import render
from .models import Video
# Create your views here.
video1: Video = Video.objects.get(id=1)
video2: Video = Video.objects.filter(id=1).first()
这是 models.py
:
class Video(models.Model):
'''
info about videos
'''
video_id = models.TextField(blank=True, null=True)
title = models.TextField()
description = models.TextField()
tags = models.TextField()
is_uploaded = models.BooleanField()
date_uploaded = models.DateField(null=True)
filename = models.TextField()
thumbnail_filename = models.TextField()
当我开始打字时,我从 video1: Video = Video.objects.get(id=1)
得到 video1
:
如您所见,它提供了模型字段
但是对于来自 video2: Video = Video.objects.filter(id=1).first()
的 video2
:
它不提供模型字段。
为什么会这样,我们该如何解决?
第一个知道它正在获取单个模型实例,因为它由 QuerySet 保证。我认为第二个不保证return一个模型实例。
在 django 源代码中:
def first(self):
"""Return the first object of a query or None if no match is found."""
for obj in (self if self.ordered else self.order_by('pk'))[:1]:
return obj
所以它是 returning Optional[<instance>]
而 get()
return 是一个实例。
有趣的是,earliest
可能适用于您的用例,并且在子调用 get
.
时保证 return 模型实例
在导入 Video
模型后的 views.py
中,我正在测试智能感知在 VScode 中的工作方式。
这是views.py
from django.shortcuts import render
from .models import Video
# Create your views here.
video1: Video = Video.objects.get(id=1)
video2: Video = Video.objects.filter(id=1).first()
这是 models.py
:
class Video(models.Model):
'''
info about videos
'''
video_id = models.TextField(blank=True, null=True)
title = models.TextField()
description = models.TextField()
tags = models.TextField()
is_uploaded = models.BooleanField()
date_uploaded = models.DateField(null=True)
filename = models.TextField()
thumbnail_filename = models.TextField()
当我开始打字时,我从 video1: Video = Video.objects.get(id=1)
得到 video1
:
如您所见,它提供了模型字段
但是对于来自 video2: Video = Video.objects.filter(id=1).first()
的 video2
:
它不提供模型字段。
为什么会这样,我们该如何解决?
第一个知道它正在获取单个模型实例,因为它由 QuerySet 保证。我认为第二个不保证return一个模型实例。
在 django 源代码中:
def first(self):
"""Return the first object of a query or None if no match is found."""
for obj in (self if self.ordered else self.order_by('pk'))[:1]:
return obj
所以它是 returning Optional[<instance>]
而 get()
return 是一个实例。
有趣的是,earliest
可能适用于您的用例,并且在子调用 get
.