diff --git a/dropdown/helpers.py b/dropdown/helpers.py index e055b31..e5c396b 100644 --- a/dropdown/helpers.py +++ b/dropdown/helpers.py @@ -20,6 +20,7 @@ def from_model( q_filter: models.Q = None, no_limit=True, context_fields: typing.List[str] = None, + select_related: typing.List[str] = None, ) -> typing.Tuple[typing.List[types.DropdownItem], int]: """ Get dropdown items from given model @@ -30,6 +31,7 @@ def from_model( @param q_filter: additional filter @param no_limit: no items limit (overriding `LIMIT` in settings) @param context_fields: additional fields to be appear in context in each dropdown item + @param select_related: fields to select related @return: tuple of dropdown items and item count """ if context_fields is None: @@ -38,6 +40,11 @@ def from_model( # initial queryset queryset = model.objects.all() + # select related + # NOTE: prefetch related is not supported + if select_related is not None: + queryset = queryset.select_related(*select_related) + # filter if q_filter: queryset = queryset.filter(q_filter) diff --git a/tests/test_registry.py b/tests/registry/test_register.py similarity index 100% rename from tests/test_registry.py rename to tests/registry/test_register.py diff --git a/tests/utils/test_dot_to_relation.py b/tests/utils/test_dot_to_relation.py new file mode 100644 index 0000000..b47eda2 --- /dev/null +++ b/tests/utils/test_dot_to_relation.py @@ -0,0 +1,9 @@ +from dropdown import utils + + +def test_simple(): + assert utils.dot_to_relation('x.y') == 'x__y' + + +def test_three_dots(): + assert utils.dot_to_relation('x.y.z') == 'x__y__z'