diff --git a/rest_framework/utils/representation.py b/rest_framework/utils/representation.py index 6f2efee164..7bffa78788 100644 --- a/rest_framework/utils/representation.py +++ b/rest_framework/utils/representation.py @@ -23,10 +23,17 @@ def manager_repr(value): return repr(value) +def queryset_repr(queryset): + return "{}".format(queryset.query) + + def smart_repr(value): if isinstance(value, models.Manager): return manager_repr(value) + if isinstance(value, models.QuerySet): + value = queryset_repr(value) + if isinstance(value, Promise) and value._delegate_text: value = force_str(value) diff --git a/tests/test_model_serializer.py b/tests/test_model_serializer.py index 7da1b41ae5..55605693ca 100644 --- a/tests/test_model_serializer.py +++ b/tests/test_model_serializer.py @@ -559,6 +559,18 @@ class Meta: """) self.assertEqual(repr(TestSerializer()), expected) + def test_manual_pk_relation_will_customize_queryset_repr_to_avoid_execute_it(self): + queryset = ForeignKeyTargetModel.objects.all() + + class TestSerializer(serializers.Serializer): + field = serializers.PrimaryKeyRelatedField(queryset=queryset) + + expected = dedent(""" + TestSerializer(): + field = PrimaryKeyRelatedField(queryset='{}') + """) + self.assertEqual(repr(TestSerializer()), expected.format(queryset.query)) + def test_nested_relations(self): class TestSerializer(serializers.ModelSerializer): class Meta: