#22553 closed New feature (fixed)
Add ability to refresh queryset
| Reported by: | Owned by: | David Hoffman | |
|---|---|---|---|
| Component: | Documentation | Version: | 1.6 |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Ready for checkin | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | yes | UI/UX: | no |
Description
I propose adding a Queryset method '.refresh()' which will clear the built-in cache on any queryset passed to it.
I suggest an initial implementation of:
def refresh(self, *args, **kwargs):
"""
Returns a new QuerySet instance with the args ANDed to the existing
set.
"""
self._result_cache = None
return self
Reason this is requested:
When I'm using modelformsets I typically find the need to refresh the queryset that is used by the ModelFormset.
To do this I perform the following action:
updated_formset = ConciergeUserPoolFormset(request.POST)
if updated_formset.is_valid():
updated_formset.save()
queryset = updated_formset.get_queryset()
# we need an updated queryset, not the cached version. set the results cache to None to force re-fetch
queryset._result_cache = None
updated_formset = ConciergeUserPoolFormset(queryset=queryset)
This is not an obvious solution to the issue of updating a ModelFormset or forcing a queryset update in general, it also uses a private method of the Queryset object which I would prefer to avoid.
Change History (11)
comment:1 by , 12 years ago
comment:2 by , 11 years ago
| Triage Stage: | Unreviewed → Accepted |
|---|
I guess we probably don't want to document an underscore method. I wonder if there is any reason not to rename it (with deprecation) to clone() or something similar?
comment:3 by , 11 years ago
| Component: | Database layer (models, ORM) → Documentation |
|---|---|
| Easy pickings: | set |
.all() can be used for this. Seems like this isn't documented, so lets do that. The right place seems to be https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.all.
comment:4 by , 11 years ago
I'd be happy to write a little blurb in the docs showing how to use .all() for refreshing a QuerySet. I'm new to contributing to here though, how do I go about submitting my proposed documentation amendment?
comment:5 by , 11 years ago
Fortunately, we have extensive docs that explains how to contribute. :-)
comment:6 by , 11 years ago
| Owner: | changed from to |
|---|---|
| Status: | new → assigned |
comment:8 by , 11 years ago
| Has patch: | set |
|---|---|
| Triage Stage: | Accepted → Ready for checkin |
Looks good. Don't forget to check "Has patch" so the ticket appears in the review queue. Thanks!
comment:9 by , 11 years ago
| Resolution: | → fixed |
|---|---|
| Status: | assigned → closed |
Maybe
_clone()already does what you need.