summarylogtreecommitdiffstats
path: root/fix18syntax.patch
blob: 4d83a133037349784aa9fba98f1112fc36e82561 (plain)
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
diff -aur SwampDragon-0.4.2.2.o/swampdragon/serializers/model_serializer.py SwampDragon-0.4.2.2/swampdragon/serializers/model_serializer.py
--- SwampDragon-0.4.2.2.o/swampdragon/serializers/model_serializer.py	2015-05-13 13:02:34.000000000 -0700
+++ SwampDragon-0.4.2.2/swampdragon/serializers/model_serializer.py	2016-03-09 23:23:40.428040075 -0800
@@ -1,6 +1,20 @@
 from django.core.exceptions import ValidationError
-from django.db.models.fields.related import ReverseSingleRelatedObjectDescriptor, ForeignRelatedObjectsDescriptor, \
-    ReverseManyRelatedObjectsDescriptor, ManyRelatedObjectsDescriptor
+try:
+    # bis 1.8.x
+    from django.db.models.fields.related import ReverseSingleRelatedObjectDescriptor
+    from django.db.models.fields.related import ManyRelatedObjectsDescriptor
+    from django.db.models.fields.related import ReverseManyRelatedObjectsDescriptor
+    from django.db.models.fields.related import ForeignRelatedObjectsDescriptor
+    from django.db.models.fields.related import SingleRelatedObjectDescriptor
+    pre19syntax = True
+except:
+    # ab 1.9.0
+    from django.db.models.fields.related import ForwardManyToOneDescriptor
+    from django.db.models.fields.related import ManyToManyDescriptor
+    from django.db.models.fields.related import ReverseManyToOneDescriptor
+    from django.db.models.fields.related import ReverseOneToOneDescriptor
+    pre19syntax = False
+
 from swampdragon.model_tools import get_property, get_model
 from swampdragon.serializers.field_serializers import serialize_field
 from swampdragon.serializers.object_map import get_object_map
@@ -205,18 +219,30 @@
             # Check if the field is a relation of any kind
             field_type = getattr(self.opts.model, attr_name)
             # Reverse FK
-            if isinstance(field_type, ReverseSingleRelatedObjectDescriptor):
-                rel = get_property(self.instance, attr_name)
-                if rel:
-                    val = rel.pk
-            # FK
-            elif isinstance(field_type, ForeignRelatedObjectsDescriptor):
-                val = list(get_property(self.instance, attr_name).all().values_list('pk', flat=True))
-            elif isinstance(field_type, ReverseManyRelatedObjectsDescriptor):
-                val = list(get_property(self.instance, attr_name).all().values_list('pk', flat=True))
-            elif isinstance(field_type, ManyRelatedObjectsDescriptor):
-                val = list(get_property(self.instance, attr_name).all().values_list('pk', flat=True))
-
+            if pre19syntax:
+                # Reverse FK
+                if isinstance(field_type, ReverseSingleRelatedObjectDescriptor):
+                    rel = get_property(self.instance, attr_name)
+                    if rel:
+                        val = rel.pk
+                # FK
+                elif isinstance(field_type, ForeignRelatedObjectsDescriptor):
+                    val = list(get_property(self.instance, attr_name).all().values_list('pk', flat=True))
+                elif isinstance(field_type, ReverseManyRelatedObjectsDescriptor):
+                    val = list(get_property(self.instance, attr_name).all().values_list('pk', flat=True))
+                elif isinstance(field_type, ManyRelatedObjectsDescriptor):
+                    val = list(get_property(self.instance, attr_name).all().values_list('pk', flat=True))
+            else:
+                if isinstance(field_type, ForwardManyToOneDescriptor):
+                    rel = get_property(self.instance, attr_name)
+                    if rel:
+                        val = rel.pk
+                elif isinstance(field_type, ReverseManyToOneDescriptor):
+                    val = list(get_property(self.instance, attr_name).all().values_list('pk', flat=True))
+                elif isinstance(field_type, ManyToManyDescriptor) and field_type.reverse:
+                    al = list(get_property(self.instance, attr_name).all().values_list('pk', flat=True))
+                elif isinstance(field_type, ManyToManyDescriptor) and not field_type.reverse:
+                    val = list(get_property(self.instance, attr_name).all().values_list('pk', flat=True))
         # Serialize the field
         return serialize_field(val)