#18597: `BaseInlineFormSet` should attempt to get it's queryset from it's 
instance
related manager before falling back to it's model's default manager
--------------------------------------+------------------------------------
     Reporter:  Simon Charette        |                    Owner:  nobody
         Type:  Bug                   |                   Status:  new
    Component:  Forms                 |                  Version:  1.4
     Severity:  Normal                |               Resolution:
     Keywords:  model formset inline  |             Triage Stage:  Accepted
    Has patch:  1                     |      Needs documentation:  0
  Needs tests:  1                     |  Patch needs improvement:  0
Easy pickings:  0                     |                    UI/UX:  0
--------------------------------------+------------------------------------

Comment (by Andreas Galazis):

 This would help support prefetching configuration on parent admin's
 queryset.
 This is not sufficient to support prefetching since there are multiple (I
 have found at least 3) instances in inline admin and inline formset where
 `self.get_queryset()[i]` paradigm is used.

 At least perform some code cleanup?

 Even if this issue a won't fix for any reason at least abstract fetching
 instance by in index in a `ge_instance_by_index` method so that we can
 implement admins that do what we want of top of current base classes. If
 this is done then we will be able to overwrite ge_instance_by_index to
 return `list(self.get_queryset())[i]`   instead of
 `self.get_queryset()[i]` on inlines that support prefetching

 Also I believe that the logic about preparing queryset in
 BaseInlineFormSet should exist in a separate function called
 `prepare_queryset`:


 {{{
 def prepare_queryset(queryset):
         if queryset is None:
             queryset = self.model._default_manager
         if self.instance.pk is not None:
             qs = queryset.filter(**{self.fk.name: self.instance})
         else:
             qs = queryset.none()
         return qs
 }}}
 instead if throwing it `__init__`. Init could just call the above to get
 the value . This way filtering wouldn't be enforced in the case of related
 manager querysets since we could overwrite the method.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/18597#comment:5>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/067.3385de00a2f6a4dad7c86f50123b2c8a%40djangoproject.com.

Reply via email to