From 851628107842a5bf84725247a42cae1ac90decf6 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Wed, 19 Nov 2014 14:40:30 +0000 Subject: [PATCH 1/5] Minor fix for #2092. --- rest_framework/serializers.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 2e34dbe75..3189619e3 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -736,12 +736,12 @@ class ModelSerializer(Serializer): ]) 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) + # 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=...' From 40b1ea919b00bd8bf1f53f8eb8bf33a498b237b8 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Wed, 19 Nov 2014 14:51:49 +0000 Subject: [PATCH 2/5] Fix non-determanistic unique constraint mapping. Refs #2092. --- rest_framework/serializers.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 3189619e3..ce0d14d6f 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,12 +730,13 @@ 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]) + + 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. From 928cbc640ef1db2c3fb96d352f69b8ffb66313e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Raony=20Guimar=C3=A3es?= Date: Wed, 19 Nov 2014 13:53:36 -0200 Subject: [PATCH 3/5] small type --- docs/tutorial/quickstart.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorial/quickstart.md b/docs/tutorial/quickstart.md index c2dc4bea9..1c398c1ff 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 .. From bde725541359de1fef785801fc5dad98e70a8e2f Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Thu, 20 Nov 2014 09:30:49 +0000 Subject: [PATCH 4/5] Fix non-determanistic default bug. Closes #2099. --- rest_framework/serializers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index ce0d14d6f..2d5c843e5 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -757,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 From 04d2635b24f0699ed8ed24436a58c203ad6a9a11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gil=20Gon=C3=A7alves?= Date: Thu, 20 Nov 2014 11:33:42 +0000 Subject: [PATCH 5/5] Removed unused import from code snippet in tutorial --- docs/tutorial/5-relationships-and-hyperlinked-apis.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/tutorial/5-relationships-and-hyperlinked-apis.md b/docs/tutorial/5-relationships-and-hyperlinked-apis.md index 36473ce91..50552616b 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