Small naming corrections and errors fixed

This commit is contained in:
eofs 2013-01-14 12:10:24 +02:00
parent de3400f608
commit 3425dfd801

View File

@ -360,7 +360,7 @@ class ModelSerializerOptions(SerializerOptions):
super(ModelSerializerOptions, self).__init__(meta) super(ModelSerializerOptions, self).__init__(meta)
self.model = getattr(meta, 'model', None) self.model = getattr(meta, 'model', None)
self.read_only_fields = getattr(meta, 'read_only_fields', ()) self.read_only_fields = getattr(meta, 'read_only_fields', ())
self.include_reversed_relations = getattr(meta, 'include_reversed_relations', False) self.include_reverse_relations = getattr(meta, 'include_reverse_relations', False)
class ModelSerializer(Serializer): class ModelSerializer(Serializer):
@ -369,6 +369,10 @@ class ModelSerializer(Serializer):
""" """
_options_class = ModelSerializerOptions _options_class = ModelSerializerOptions
def get_reverse_fields(self, opts, fields):
relations = [obj for obj in opts.get_all_related_many_to_many_objects() if obj.field.serialize]
return [rel.field for rel in relations]
def get_default_fields(self): def get_default_fields(self):
""" """
Return all the fields that should be serialized for the model. Return all the fields that should be serialized for the model.
@ -383,11 +387,10 @@ class ModelSerializer(Serializer):
fields += [field for field in opts.fields if field.serialize] fields += [field for field in opts.fields if field.serialize]
fields += [field for field in opts.many_to_many if field.serialize] fields += [field for field in opts.many_to_many if field.serialize]
reversed_fields = () reverse_fields = []
if self.opts.include_reversed_relations: if self.opts.include_reverse_relations:
reversed_fields = [obj.field for obj in opts.get_all_related_objects() if obj.field.serialize] reverse_fields = self.get_reverse_fields(opts, fields)
reversed_fields = [obj.field for obj in opts.get_all_related_many_to_many_objects() if obj.field.serialize] fields += reverse_fields
fields += reversed_fields
ret = SortedDict() ret = SortedDict()
nested = bool(self.opts.depth) nested = bool(self.opts.depth)
@ -407,7 +410,7 @@ class ModelSerializer(Serializer):
field = self.get_field(model_field) field = self.get_field(model_field)
if field: if field:
if model_field in reversed_fields: if model_field in reverse_fields:
ret[model_field.rel.related_name] = field ret[model_field.rel.related_name] = field
else: else:
ret[model_field.name] = field ret[model_field.name] = field
@ -431,8 +434,14 @@ class ModelSerializer(Serializer):
Creates a default instance of a nested relational field. Creates a default instance of a nested relational field.
""" """
# If field is reversed relation, get model from relation # Field has reverse relation if it's referring to different model
obj_model = model_field.rel.to if self.opts.model is not model_field.rel.to else model_field.model if self.opts.model is not model_field.rel.to:
# Get correct model from the relation
obj_model = model_field.rel.to
else:
# Forward relation, no need for magic
obj_model = model_field.model
class NestedModelSerializer(ModelSerializer): class NestedModelSerializer(ModelSerializer):
class Meta: class Meta:
model = obj_model model = obj_model