From 7954c03cbf922ed380cfedd75af128e17fbc863a Mon Sep 17 00:00:00 2001 From: Adrien Brunet Date: Tue, 8 Jan 2019 14:18:16 +0100 Subject: [PATCH] move limit_choices_to logic from relations.py to utils/field_mapping.py --- rest_framework/relations.py | 6 ------ rest_framework/utils/field_mapping.py | 3 +++ 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/rest_framework/relations.py b/rest_framework/relations.py index 20390b610..e8a4ec2ac 100644 --- a/rest_framework/relations.py +++ b/rest_framework/relations.py @@ -169,12 +169,6 @@ class RelatedField(Field): # for the field. # Eg: 'MyRelationship(queryset=ExampleModel.objects.all())' queryset = queryset.all() - if hasattr(self.parent, "Meta") and hasattr(self.parent.Meta, "model"): - filter_dict = self.parent.Meta.model._meta.get_field( - self.source - ).get_limit_choices_to() - if filter_dict: - queryset = queryset.filter(**filter_dict) return queryset def use_pk_only_optimization(self): diff --git a/rest_framework/utils/field_mapping.py b/rest_framework/utils/field_mapping.py index d3044ff59..e8f24b6b9 100644 --- a/rest_framework/utils/field_mapping.py +++ b/rest_framework/utils/field_mapping.py @@ -266,6 +266,9 @@ def get_relation_kwargs(field_name, relation_info): # If this field is read-only, then return early. # No further keyword arguments are valid. return kwargs + limit_choices_to = model_field.get_limit_choices_to() + if limit_choices_to: + kwargs['queryset'] = kwargs['queryset'].filter(**limit_choices_to) if model_field.has_default() or model_field.blank or model_field.null: kwargs['required'] = False