Example #1
0
 def add_reverse_relation_model_field(cls, fields, model_field, meta, **kwargs):
     if django_utils.is_reverse_relation_field(model_field):
         field_name = django_utils.get_reverse_related_name_from_field(model_field)
         relation_parents_manager = meta.parents.get_working_copy()
         rel_django_model = django_utils.get_related_model_from_field(model_field)
         if not relation_parents_manager.handle(rel_django_model):
             return None
         field_kwargs = meta.field_arguments.get_nested_field_kwargs(field_name)
         serializer_cls = cls.get_nested_serializer_class(rel_django_model,
                                                          relation_parents_manager,
                                                          **field_kwargs)
         if django_utils.is_reverse_one2one_relation_field(model_field):
             field_class = serializer_fields.SerializerField
         else:
             field_class = RelatedManagerListSerializerField
         kwargs = meta.field_arguments.parse(model_field.name, **kwargs)
         _field = field_class(serializer_cls, required=False, **kwargs)
         _field.add_name(django_utils.get_reverse_related_name_from_field(model_field))
         fields[field_name] = _field
         return _field
     return None
Example #2
0
 def set_fields_from_model(cls, new_class, fields, meta):
     if django_models is None or meta.model is None:
         return
     meta.parents.handle(meta.model)
     all_field_names = cls.get_all_fieldnames(fields)
     for model_field in django_utils.get_local_fields(meta.model):
         if model_field.name not in all_field_names:
             serializer_field = cls.add_local_model_field(fields, model_field, meta=meta)
             if serializer_field:
                 setattr(new_class, model_field.name, serializer_field)
     for model_field in django_utils.get_related_fields(meta.model):
         if model_field.name not in all_field_names:
             serializer_field = cls.add_relation_model_field(fields, model_field, meta=meta)
             if serializer_field:
                 setattr(new_class, model_field.name, serializer_field)
     for model_field in django_utils.get_reverse_related_fields(meta.model):
         field_name = django_utils.get_reverse_related_name_from_field(model_field)
         if field_name not in all_field_names:
             serializer_field = cls.add_reverse_relation_model_field(fields, model_field, meta=meta)
             if serializer_field:
                 setattr(new_class, field_name, serializer_field)