Python django-何时计算.objects.get()?
假设我有:Python django-何时计算.objects.get()?,python,django,Python,Django,假设我有: class Library(models.Model): name = models.CharField(max_length = 100) class Books(models.Model): library = models.ForeignKey(Library) book = models.CharField(max_length = 100) 我想创建一个新的图书,我们知道我们可以用库的id来填充图书上的库,但是我们也可以使用库的实例。我的问题是,
class Library(models.Model):
name = models.CharField(max_length = 100)
class Books(models.Model):
library = models.ForeignKey(Library)
book = models.CharField(max_length = 100)
我想创建一个新的图书
,我们知道我们可以用库
的id来填充图书
上的库,但是我们也可以使用库
的实例。我的问题是,如果我们只提供身份证是否更好?如果我想使用该实例,那么我必须使用.get()
进行计算,然后它会影响数据库吗
附加问题:从文档中可以看出,queryset是惰性的,它在评估之前不会访问数据库,所以queryset何时评估?是的,.get()
会立即评估。当然,使用IDs可以避免数据库查询
get
并不懒惰,因为它不返回QuerySet-它返回模型的单个实例。查询集来自.filter()
,因此,例如Library.objects.filter(id=5)
是延迟计算的,而Library.objects.get(id=5)
是立即计算的
QuerySet的实际计算包含在-基本上,任何时候您实际从QuerySet中提取一个值,它都会得到计算。完整列表如下:
- 迭代
- 切片
- 酸洗
repr()
len()
list()
bool()
debugsqlshell
中调用它来验证get
是否立即进行了计算是非常容易的-您将看到立即生成并执行的查询。感谢您澄清这一点,不知何故,我一直认为它与querysets一样工作。。