Django查询集以惰性方式求值。例如:
# models.py: class Author(models.Model): name = models.CharField(max_length=100) class Book(models.Model): author = models.ForeignKey(Author, related_name='books') title = models.CharField(max_length=100)
# views.py def myview(request): # Query the database books = Book.objects.all() for book in books: # Query the database on each iteration to get author (len(books) times) # if there is 100 books, there will have 100 queries plus the initial query book.author # ... # total : 101 queries
上面的代码使django在数据库中查询每本书的作者。这样效率低下,最好只包含一个查询。
使用select_related上ForeignKey,如果你知道你将需要以后访问一个ForeignKey领域。
# views.py def myview(request): # Query the database. books = Books.objects.select_related('author').all() for book in books: # Does not query the database again, since `author` is pre-populated book.author # ... # total : 1 query
select_related 也可以用于查找字段:
# models.py: class AuthorProfile(models.Model): city = models.CharField(max_length=100) class Author(models.Model): name = models.CharField(max_length=100) profile = models.OneToOneField(AuthorProfile) class Book(models.Model): author = models.ForeignKey(Author, related_name='books') title = models.CharField(max_length=100)
# views.py def myview(request): books = Book.objects.select_related('author')\ .select_related('author__profile').all() for book in books: # Does not query database book.author.name # or book.author.profile.city # ... # total : 1 query
本文向大家介绍Django 减少对ManyToManyField的查询数量(n + 1个问题),包括了Django 减少对ManyToManyField的查询数量(n + 1个问题)的使用技巧和注意事项,需要的朋友参考一下 示例 问题 解 使用prefetch_related上ManyToManyField,如果你知道你需要访问后场是一个ManyToManyField场。 prefetch_rel
我在谷歌周围看了一段时间,但没有工作。有谁能帮我解决这个问题吗?
问题内容: 我有以下模型: 我想在管理员中添加时过滤字段,如下所示: 我已经尝试了很多东西,但是没有任何效果!我怎样才能做到这一点? 问题答案: 使用方法:
问题内容: 我有一个模型和,就像这样: 现在我有了一些和对象,我想得到一个查询,该查询选择所有指向少于2的对象。 A就像一个池子,用户(B)加入池。如果仅加入1或0,则根本不应该显示该池。 这样的模型设计可能吗?还是我应该修改一下? 问题答案: 听起来像是一份工作。 如果B计数通常是您需要的过滤或排序标准,或者需要显示在列表视图中,则可以考虑通过将b_count字段添加到A模型并在添加B或添加B时
问题内容: 我只想知道如何从$ row [posts_remaining]中出现的数字中减去1 换一种说法… 这将给我我的结果,其中row posts_remaining = {THE NUMBER} 但是我想通过从中减去一个数字,然后在旧数字所在的位置设置新数字来更新返回的数字。 我希望我不要让这个令人困惑。很难解释。 另外…为了进行此操作,我是否应该将行“ posts_remaining”设置
问题内容: 这可能无关紧要,只是想问一下, 如果一个对象从视图传递到模板,并且在模板中我将能够查询许多字段 型号代码: 观看次数: 在模板中可以解码多对多字段,因为我们正在传递对象 谢谢.. 问题答案: 通常,您可以通过django模板系统中的路径来跟踪任何不带参数的属性或方法调用。 对于上面的视图代码,类似 应该做您期望的。 (我无法完全从代码示例中找出具体细节,但希望这会阐明您可以从模板中学到