File: serializers.py

package info (click to toggle)
django-countries 7.6.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,400 kB
  • sloc: python: 3,425; sh: 29; makefile: 17
file content (29 lines) | stat: -rw-r--r-- 1,180 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from rest_framework import serializers

from . import fields, serializer_fields


class CountryFieldMixin:
    def build_standard_field(self, field_name, model_field):
        field_class, field_kwargs = super().build_standard_field(
            field_name, model_field
        )
        if (
            # Only deal with CountryFields.
            not isinstance(model_field, fields.CountryField)
            # Some other mixin has changed the field class already!
            or field_class is not serializers.ChoiceField
        ):
            return field_class, field_kwargs
        field_kwargs["countries"] = model_field.countries
        del field_kwargs["choices"]
        if not model_field.multiple:
            field_class = serializer_fields.CountryField
        else:
            field_class = serializers.ListField
            child_field = serializer_fields.CountryField(**field_kwargs)
            field_kwargs = {"child": child_field}
            if "max_length" in serializers.ListField.default_error_messages:
                # Added in DRF 3.5.4
                field_kwargs["max_length"] = len(child_field.countries)
        return field_class, field_kwargs