#31295: required ModelChoiceField makes duplicate (cursor) queries to the 
database
-------------------------------------+-------------------------------------
     Reporter:  Aurélien Pardon      |                    Owner:  nobody
         Type:                       |                   Status:  closed
  Cleanup/optimization               |
    Component:  Forms                |                  Version:  2.2
     Severity:  Normal               |               Resolution:  needsinfo
     Keywords:  Model                |             Triage Stage:
                                     |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------

Comment (by Carlton Gibson):

 > How is that correct if the queries yield different results ?

 I don't know what else I can say. It's part of the design of
 ModelChoiceField that it re-evaluates it's queryset each time it's
 iterated.
 See #3534 for example, 13 years ago:

 > ModelChoiceField and ModelMultipleChoiceField cache the output of their
 queryset the first time self.choices is accessed. This is bad for long-
 running processes, such as mod_python, because the cache gets stale. Plus,
 it's bad saving all of those choices in memory. The attached unit tests
 illustrate the problem.

 The exact same memory usage considerations were the motivation for the
 move to iterator() in #23623. I can't see that being removed.

 If the kind of race conditions you're talking about are a factor for your
 app then, at least until #22841 is addressed, maybe you do need a
 ModelChoiceIterator subclass for your field. (Always use the QuerySet
 rather than the iterator...)

-- 
Ticket URL: <https://code.djangoproject.com/ticket/31295#comment:6>
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 django-updates+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/065.17eb8bba0800b04d95b1025b40345ef3%40djangoproject.com.

Reply via email to