#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 , 11 years ago
comment:2 by , 10 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 , 10 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 , 10 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 , 10 years ago
Fortunately, we have extensive docs that explains how to contribute. :-)
comment:6 by , 10 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:8 by , 10 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 , 10 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
Maybe
_clone()
already does what you need.