Skip to content
This repository was archived by the owner on Apr 24, 2025. It is now read-only.

Commit bcddfc9

Browse files
authored
Merge pull request #25 from Work4Labs/as/BAT-7730/LazyQuerysetInitReferenceField
BAT-7730 Lazy initialization for ReferenceField
2 parents c53be72 + 4de9ab5 commit bcddfc9

File tree

2 files changed

+10
-14
lines changed

2 files changed

+10
-14
lines changed

mongodbforms/fieldgenerator.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ def generate_referencefield(self, field, **kwargs):
304304
'label': self.get_field_label(field),
305305
'help_text': self.get_field_help_text(field),
306306
'required': field.required,
307-
'queryset': field.document_type.objects.clone(),
307+
'document': field.document_type,
308308
}
309309
form_class = self.form_field_map.get(map_key)
310310
defaults.update(self.check_widget(map_key))
@@ -331,7 +331,7 @@ def generate_listfield(self, field, **kwargs):
331331
elif isinstance(field.field, MongoReferenceField):
332332
map_key = 'listfield_references'
333333
defaults.update({
334-
'queryset': field.field.document_type.objects.clone(),
334+
'document': field.field.document_type,
335335
})
336336
else:
337337
map_key = 'listfield'

mongodbforms/fields.py

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -76,18 +76,15 @@ class ReferenceField(forms.ChoiceField):
7676
Reference field for mongo forms. Inspired by
7777
`django.forms.models.ModelChoiceField`.
7878
"""
79-
def __init__(self, queryset, empty_label="---------", *args, **kwargs):
79+
def __init__(self, document, empty_label="---------", *args, **kwargs):
8080
forms.Field.__init__(self, *args, **kwargs)
8181
self.empty_label = empty_label
82-
self.queryset = queryset
83-
84-
def _get_queryset(self):
85-
return self._queryset.clone()
86-
87-
def _set_queryset(self, queryset):
88-
self._queryset = queryset
82+
self._document = document
8983
self.widget.choices = self.choices
90-
queryset = property(_get_queryset, _set_queryset)
84+
85+
@property
86+
def queryset(self):
87+
return self._document.objects.clone()
9188

9289
def prepare_value(self, value):
9390
if hasattr(value, '_meta'):
@@ -128,7 +125,6 @@ def clean(self, value):
128125

129126
def __deepcopy__(self, memo):
130127
result = super(forms.ChoiceField, self).__deepcopy__(memo)
131-
result.queryset = self.queryset # self.queryset calls clone()
132128
result.empty_label = copy.deepcopy(self.empty_label)
133129
return result
134130

@@ -160,9 +156,9 @@ class DocumentMultipleChoiceField(ReferenceField):
160156
'invalid_pk_value': _('"%s" is not a valid value for a primary key.')
161157
}
162158

163-
def __init__(self, queryset, *args, **kwargs):
159+
def __init__(self, document, *args, **kwargs):
164160
super(DocumentMultipleChoiceField, self).__init__(
165-
queryset, empty_label=None, *args, **kwargs
161+
document, empty_label=None, *args, **kwargs
166162
)
167163

168164
def clean(self, value):

0 commit comments

Comments
 (0)