Add ability to refresh queryset
|Reported by:||Owned by:||David Hoffman|
|Cc:||Triage Stage:||Ready for checkin|
|Has patch:||yes||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
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 Changed 2 years ago by
|Patch needs improvement:||unset|
comment:3 Changed 2 years ago by
|Component:||Database layer (models, ORM) → Documentation|