Dal*_*tor 5 python django django-orm
我有以下型号:
class Publisher(models.Model):
name = models.CharField(max_length=30)
class Book(models.Model):
title = models.CharField(max_length=100)
publisher = models.ForeignKey(Publisher)
Run Code Online (Sandbox Code Playgroud)
在我的views.py中,当我想显示发布者页面时,我也想展示他们的书籍,所以我通常会这样做:
publisher = Publisher.objects.prefetch_related('book_set').filter(pk=id).first()
Run Code Online (Sandbox Code Playgroud)
然后,经过一些处理,我也做了一些书籍的工作
for book in publisher.book_set.all():
foo()
Run Code Online (Sandbox Code Playgroud)
这很好用,但我有一个问题.如果在查询和for循环之间添加了一本书,publisher.book_set.all()则不会有新添加的书籍,因为它是预取的.
有没有办法更新发布者对象?
您可以删除实例上的整个预取缓存:
if hasattr(publisher, '_prefetched_objects_cache'):
del publisher._prefetched_objects_cache
Run Code Online (Sandbox Code Playgroud)
如果您只想删除特定的预取关系:
if hasattr(publisher, '_prefetched_objects_cache'):
publisher._prefetched_objects_cache.pop('book_set', None)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
568 次 |
| 最近记录: |