Skip to content

Commit

Permalink
Merge 903cebb into f33223d
Browse files Browse the repository at this point in the history
  • Loading branch information
kimbriancanavan committed Apr 25, 2020
2 parents f33223d + 903cebb commit b84776c
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 1 deletion.
26 changes: 26 additions & 0 deletions docs/filtering.rst
Expand Up @@ -123,6 +123,15 @@ create your own ``FilterSet``. You can pass it directly as follows:
class AnimalFilter(django_filters.FilterSet):
# Do case-insensitive lookups on 'name'
name = django_filters.CharFilter(lookup_expr=['iexact'])
# Allow multiple genera to be selected at once
genera = django_filters.MultipleChoiceFilter(
field_name='genus',
choices=(
('Canis', 'Canis'),
('Panthera', 'Panthera'),
('Seahorse', 'Seahorse')
)
)
class Meta:
model = Animal
Expand All @@ -135,6 +144,22 @@ create your own ``FilterSet``. You can pass it directly as follows:
all_animals = DjangoFilterConnectionField(AnimalNode,
filterset_class=AnimalFilter)
If you were interested in selecting all dogs and cats, you might query as follows:

.. code::
query {
allAnimals(genera: ["Canis", "Panthera"]) {
edges {
node {
id,
name
}
}
}
}
You can also specify the ``FilterSet`` class using the ``filterset_class``
parameter when defining your ``DjangoObjectType``, however, this can't be used
in unison with the ``filter_fields`` parameter:
Expand Down Expand Up @@ -162,6 +187,7 @@ in unison with the ``filter_fields`` parameter:
animal = relay.Node.Field(AnimalNode)
all_animals = DjangoFilterConnectionField(AnimalNode)
The context argument is passed on as the `request argument <http://django-filter.readthedocs.io/en/master/guide/usage.html#request-based-filtering>`__
in a ``django_filters.FilterSet`` instance. You can use this to customize your
filters to be context-dependent. We could modify the ``AnimalFilter`` above to
Expand Down
7 changes: 6 additions & 1 deletion graphene_django/forms/converter.py
Expand Up @@ -55,9 +55,14 @@ def convert_form_field_to_float(field):
return Float(description=field.help_text, required=field.required)


@convert_form_field.register(forms.MultipleChoiceField)
def convert_form_field_to_string_list(field):
return List(String, description=field.help_text, required=field.required)


@convert_form_field.register(forms.ModelMultipleChoiceField)
@convert_form_field.register(GlobalIDMultipleChoiceField)
def convert_form_field_to_list(field):
def convert_form_field_to_id_list(field):
return List(ID, required=field.required)


Expand Down
4 changes: 4 additions & 0 deletions graphene_django/forms/tests/test_converter.py
Expand Up @@ -66,6 +66,10 @@ def test_should_choice_convert_string():
assert_conversion(forms.ChoiceField, String)


def test_should_multiple_choice_convert_list():
assert_conversion(forms.MultipleChoiceField, List)


def test_should_base_field_convert_string():
assert_conversion(forms.Field, String)

Expand Down

0 comments on commit b84776c

Please sign in to comment.