diff options
| -rw-r--r-- | docs/tutorial/5-relationships-and-hyperlinked-apis.md | 1 | ||||
| -rw-r--r-- | docs/tutorial/quickstart.md | 2 | ||||
| -rw-r--r-- | rest_framework/serializers.py | 20 | 
3 files changed, 12 insertions, 11 deletions
| diff --git a/docs/tutorial/5-relationships-and-hyperlinked-apis.md b/docs/tutorial/5-relationships-and-hyperlinked-apis.md index 36473ce9..50552616 100644 --- a/docs/tutorial/5-relationships-and-hyperlinked-apis.md +++ b/docs/tutorial/5-relationships-and-hyperlinked-apis.md @@ -6,7 +6,6 @@ At the moment relationships within our API are represented by using primary keys  Right now we have endpoints for 'snippets' and 'users', but we don't have a single entry point to our API.  To create one, we'll use a regular function-based view and the `@api_view` decorator we introduced earlier. In your `snippets/views.py` add: -    from rest_framework import renderers      from rest_framework.decorators import api_view      from rest_framework.response import Response      from rest_framework.reverse import reverse diff --git a/docs/tutorial/quickstart.md b/docs/tutorial/quickstart.md index c2dc4bea..1c398c1f 100644 --- a/docs/tutorial/quickstart.md +++ b/docs/tutorial/quickstart.md @@ -19,7 +19,7 @@ Create a new Django project named `tutorial`, then start a new app called `quick      pip install djangorestframework      # Set up a new project with a single application -    django-admin.py startproject tutorial . +    django-admin.py startproject tutorial      cd tutorial      django-admin.py startapp quickstart  	cd .. diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 2e34dbe7..2d5c843e 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -721,6 +721,7 @@ class ModelSerializer(Serializer):          # arguments to deal with `unique_for` dates that are required to          # be in the input data in order to validate it.          hidden_fields = {} +        unique_constraint_names = set()          for model_field_name, field_name in model_field_mapping.items():              try: @@ -729,19 +730,20 @@ class ModelSerializer(Serializer):                  continue              # Include each of the `unique_for_*` field names. -            unique_constraint_names = set([ +            unique_constraint_names |= set([                  model_field.unique_for_date,                  model_field.unique_for_month,                  model_field.unique_for_year              ]) -            unique_constraint_names -= set([None]) -            # Include each of the `unique_together` field names, -            # so long as all the field names are included on the serializer. -            for parent_class in [model] + list(model._meta.parents.keys()): -                for unique_together_list in parent_class._meta.unique_together: -                    if set(fields).issuperset(set(unique_together_list)): -                        unique_constraint_names |= set(unique_together_list) +        unique_constraint_names -= set([None]) + +        # Include each of the `unique_together` field names, +        # so long as all the field names are included on the serializer. +        for parent_class in [model] + list(model._meta.parents.keys()): +            for unique_together_list in parent_class._meta.unique_together: +                if set(fields).issuperset(set(unique_together_list)): +                    unique_constraint_names |= set(unique_together_list)          # Now we have all the field names that have uniqueness constraints          # applied, we can add the extra 'required=...' or 'default=...' @@ -755,7 +757,7 @@ class ModelSerializer(Serializer):              elif getattr(unique_constraint_field, 'auto_now', None):                  default = timezone.now              elif unique_constraint_field.has_default(): -                default = model_field.default +                default = unique_constraint_field.default              else:                  default = empty | 
