def _add_condition(self, operator, operand, types):
        """Appends condition to self._query after performing validation

        :param operator: operator (str)
        :param operand: operand
        :param types: allowed types
        :raise:
            - QueryMissingField: if a field hasn't been set
            - QueryMultipleExpressions: if a condition already has been set
            - QueryTypeError: if the value is of an unexpected type
        """

        if not self.current_field:
            raise QueryMissingField("Conditions requires a field()")

        elif not type(operand) in types:
            caller = inspect.currentframe().f_back.f_code.co_name
            raise QueryTypeError("Invalid type passed to %s() , expected: %s" % (caller, types))

        elif self.c_oper:
            raise QueryMultipleExpressions("Expected logical operator after expression")

        self.c_oper = inspect.currentframe().f_back.f_code.co_name

        self._query.append("%(current_field)s%(operator)s%(operand)s" % {
                               'current_field': self.current_field,
                               'operator': operator,
                               'operand': operand
        })

        return self
Appends condition to self._query after performing validation

        :param operator: operator (str)
        :param operand: operand
        :param types: allowed types
        :raise:
            - QueryMissingField: if a field hasn't been set
            - QueryMultipleExpressions: if a condition already has been set
            - QueryTypeError: if the value is of an unexpected type