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)
|