Django

Code

Changeset 7710

Show
Ignore:
Timestamp:
06/19/08 16:15:33 (7 months ago)
Author:
jacob
Message:

Fixed #7475: fixed a possible race condition in ModelChoiceIterator?. Thanks, esaj.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/newforms/models.py

    r7644 r7710  
    286286        if self.field.empty_label is not None: 
    287287            yield (u"", self.field.empty_label) 
    288         for obj in self.queryset: 
    289             yield (obj.pk, self.field.label_from_instance(obj)) 
    290         # Clear the QuerySet cache if required. 
    291         if not self.field.cache_choices: 
    292             self.queryset._result_cache = None 
     288        if self.field.cache_choices: 
     289            if self.field.choice_cache is None: 
     290                self.field.choice_cache = [ 
     291                    (obj.pk, self.field.label_from_instance(obj)) 
     292                    for obj in self.queryset.all() 
     293                ] 
     294            for choice in self.field.choice_cache: 
     295                yield choice 
     296        else: 
     297            for obj in self.queryset.all(): 
     298                yield (obj.pk, self.field.label_from_instance(obj)) 
    293299 
    294300class ModelChoiceField(ChoiceField): 
     
    312318                       *args, **kwargs) 
    313319        self.queryset = queryset 
     320        self.choice_cache = None 
    314321 
    315322    def _get_queryset(self):