diff --git a/src/tixlbase/models.py b/src/tixlbase/models.py index cc7a0cc3d..528831fec 100644 --- a/src/tixlbase/models.py +++ b/src/tixlbase/models.py @@ -579,7 +579,7 @@ class Item(models.Model): self.active = False return super().save() - def get_all_variations(self): + def get_all_variations(self, use_cache=False): """ This method returns a list containing all variations of this item. The list contains one VariationDict per variation, where @@ -590,6 +590,9 @@ class Item(models.Model): VariationDicts differ from dicts only by specifying some extra methods. """ + if use_cache and hasattr(self, '_get_all_variations_cache'): + return self._get_all_variations_cache + all_variations = self.variations.all().prefetch_related("values") all_properties = self.properties.all().prefetch_related("values") variations_cache = {} @@ -615,6 +618,7 @@ class Item(models.Model): var['variation'] = variations_cache[key] result.append(var) + self._get_all_variations_cache = result return result diff --git a/src/tixlcontrol/views/forms.py b/src/tixlcontrol/views/forms.py index 89104506d..d86fc670d 100644 --- a/src/tixlcontrol/views/forms.py +++ b/src/tixlcontrol/views/forms.py @@ -8,7 +8,7 @@ from django.utils.html import format_html from django.utils.safestring import mark_safe from django.utils.translation import ugettext as _ -from tixlbase.models import ItemVariation, PropertyValue +from tixlbase.models import ItemVariation, PropertyValue, Item class TolerantFormsetModelForm(forms.ModelForm): @@ -71,8 +71,13 @@ class RestrictionInlineFormset(forms.BaseInlineFormSet): render a working empty form for a JavaScript-enabled restriction formset. """ - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) + def __init__(self, data=None, files=None, instance=None, + save_as_new=False, prefix=None, queryset=None, **kwargs): + super().__init__( + data, files, instance, save_as_new, prefix, queryset, **kwargs + ) + if isinstance(self.instance, Item): + self.queryset = self.queryset.prefetch_related("variations") def initialized_empty_form(self): form = self.form( @@ -242,7 +247,7 @@ class VariationsField(forms.ModelMultipleChoiceField): """ if self.item is None: return () - variations = self.item.get_all_variations() + variations = self.item.get_all_variations(use_cache=True) return ( ( v['variation'].pk if 'variation' in v else v.key(),