def METHOD_NAME(config, model_name, data_dict, instance):
    """
    Takes a model specified in the config global and a
    dict of json data and attempts to populate a django
    model. Does not save.
    """
    validate_model_dict(config, model_name, data_dict)
    common_fields = config[model_name].get('common_fields', set())
    renamed_fields = config[model_name].get('renamed_fields', {})
    dependency_fields = config[model_name].get('dependencies', {})
    instance_field = None
    ModelClass = config[model_name].get('model_class')
    if ModelClass is None:
        return PROCESS_WITHOUT_SAVE
    else:
        try:
            instance_field = ModelClass._meta.get_field('instance')
        except:
            pass
        # instance *must* be set during initialization
        model = ModelClass() \
            if instance_field is None or \
            instance_field.many_to_many or \
            instance_field.one_to_many \
            else ModelClass(instance=instance)
    for field in (common_fields
                  .union(renamed_fields)
                  .union(dependency_fields.values())):
        transform_fn = (config[model_name]
                        .get('value_transformers', {})
                        .get(field, None))
        transformed_value = (transform_fn(data_dict['fields'][field])
                             if transform_fn else data_dict['fields'][field])
        transformed_field = renamed_fields.get(field, field)
        if transformed_field.startswith('udf:'):
            if transformed_value is not None:
                model.udfs[transformed_field[4:]] = transformed_value
        else:
            suffix = ('_id'
                      if transformed_field in dependency_fields.values()
                      else '')
            setattr(model, transformed_field + suffix, transformed_value)
    result = model
    for mutator in config[model_name].get('presave_actions', []):
        if result != DO_NOT_PROCESS and result is not None:
            result = mutator(result, data_dict)
    # result can be one of three things:
    # * A valid model object. This will be saved and a relic created for it.
    # * A pseudo-enum value, DO_NOT_PROCESS, indicating that this
    #   record should be wholly disregarded. This means not even
    #   creating a relic.
    # * A psuedo-enum value, PROCESS_WITHOUT_SAVE, indicating that
    #   this record won't be saved, but a relic should be create for it.
    return result