Refactored create & update forms into 1 form
This commit is contained in:
		
							parent
							
								
									71866cd883
								
							
						
					
					
						commit
						7bb5727cbf
					
				@ -10,7 +10,7 @@ addasset_bp = Blueprint('addasset', __name__)
 | 
			
		||||
def create():
 | 
			
		||||
    if request.method == 'GET':
 | 
			
		||||
        # Render the "add item" form
 | 
			
		||||
        return render_template('create.html', item_attributes=item_attributes)
 | 
			
		||||
        return render_template('item_form.html', item_attributes=item_attributes, item=None)
 | 
			
		||||
 | 
			
		||||
    # Process submitted form
 | 
			
		||||
    if request.method == 'POST':
 | 
			
		||||
@ -20,7 +20,7 @@ def create():
 | 
			
		||||
        # Form validation
 | 
			
		||||
        error = validate_values(form_data)
 | 
			
		||||
        if error:
 | 
			
		||||
            return render_template('create.html', item_attributes=item_attributes, error=error)
 | 
			
		||||
            return render_template('item_form.html', item_attributes=item_attributes, item=None, error=error)
 | 
			
		||||
 | 
			
		||||
        # Create the Asset object
 | 
			
		||||
        item = Asset(**form_data)
 | 
			
		||||
@ -35,15 +35,15 @@ def create():
 | 
			
		||||
                error = f"An entry with {primary_attrib.display_name} '{form_data[primary_attrib.attrib_name]}' already exists."
 | 
			
		||||
            else:
 | 
			
		||||
                error = "An entry with the same primary key already exists."
 | 
			
		||||
            return render_template('create.html', item_attributes=item_attributes, error=error)
 | 
			
		||||
            return render_template('item_form.html', item_attributes=item_attributes, item=None, error=error)
 | 
			
		||||
        except exc.StatementError as e:
 | 
			
		||||
            # Handle other database errors
 | 
			
		||||
            error = f"Database error: {str(e)}"
 | 
			
		||||
            return render_template('create.html', item_attributes=item_attributes, error=error)
 | 
			
		||||
            return render_template('item_form.html', item_attributes=item_attributes, item=None, error=error)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            # Handle unexpected errors
 | 
			
		||||
            error = f"An unexpected error occurred: {str(e)}"
 | 
			
		||||
            return render_template('create.html', item_attributes=item_attributes, error=error)
 | 
			
		||||
            return render_template('item_form.html', item_attributes=item_attributes, item=None, error=error)
 | 
			
		||||
 | 
			
		||||
        # Redirect to /viewall on success
 | 
			
		||||
        return redirect('/viewall')
 | 
			
		||||
@ -20,7 +20,7 @@ def update(primary_value):
 | 
			
		||||
 | 
			
		||||
    if request.method == 'GET':
 | 
			
		||||
        # Render the update form with the current item data
 | 
			
		||||
        return render_template('update.html', item=item, item_attributes=item_attributes)
 | 
			
		||||
        return render_template('item_form.html', item=item, item_attributes=item_attributes)
 | 
			
		||||
 | 
			
		||||
    if request.method == 'POST':
 | 
			
		||||
        # Get data from form
 | 
			
		||||
@ -29,7 +29,7 @@ def update(primary_value):
 | 
			
		||||
        # Form validation
 | 
			
		||||
        error = validate_values(form_data)
 | 
			
		||||
        if error:
 | 
			
		||||
            return render_template('update.html', item=item, item_attributes=item_attributes, error=error)
 | 
			
		||||
            return render_template('item_form.html', item=item, item_attributes=item_attributes, error=error)
 | 
			
		||||
 | 
			
		||||
        # Update the item with the new data
 | 
			
		||||
        for attrib in item_attributes:
 | 
			
		||||
@ -40,15 +40,15 @@ def update(primary_value):
 | 
			
		||||
        except exc.IntegrityError:
 | 
			
		||||
            # Handle duplicate primary key or unique constraint errors
 | 
			
		||||
            error = f"An entry with {primary_attrib.display_name} '{form_data[primary_attrib.attrib_name]}' already exists."
 | 
			
		||||
            return render_template('update.html', item=item, item_attributes=item_attributes, error=error)
 | 
			
		||||
            return render_template('item_form.html', item=item, item_attributes=item_attributes, error=error)
 | 
			
		||||
        except exc.StatementError as e:
 | 
			
		||||
            # Handle other database errors
 | 
			
		||||
            error = f"Database error: {str(e)}"
 | 
			
		||||
            return render_template('update.html', item=item, item_attributes=item_attributes, error=error)
 | 
			
		||||
            return render_template('item_form.html', item=item, item_attributes=item_attributes, error=error)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            # Handle unexpected errors
 | 
			
		||||
            error = f"An unexpected error occurred: {str(e)}"
 | 
			
		||||
            return render_template('update.html', item=item, item_attributes=item_attributes, error=error)
 | 
			
		||||
            return render_template('item_form.html', item=item, item_attributes=item_attributes, error=error)
 | 
			
		||||
 | 
			
		||||
        # Redirect to /viewall on success
 | 
			
		||||
        return redirect('/viewall')
 | 
			
		||||
@ -2,17 +2,17 @@
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
    <meta charset="UTF-8">
 | 
			
		||||
    <title>Add an Item</title>
 | 
			
		||||
    <title>{% if item %}Update{% else %}Add{% endif %} Item</title>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
    <h2 align="center">Add new Item</h2>
 | 
			
		||||
    <h2 align="center">{% if item %}Update{% else %}Add{% endif %} Item</h2>
 | 
			
		||||
 | 
			
		||||
    <!-- Display error message if any -->
 | 
			
		||||
    {% if error %}
 | 
			
		||||
        <p>{{ error }}</p>
 | 
			
		||||
    {% endif %}
 | 
			
		||||
 | 
			
		||||
    <!-- Form for adding a new item -->
 | 
			
		||||
    <!-- Form for adding/updating an item -->
 | 
			
		||||
    <form method="POST">
 | 
			
		||||
        {% for attrib in item_attributes -%}
 | 
			
		||||
        <p>
 | 
			
		||||
@ -25,7 +25,7 @@
 | 
			
		||||
                    {% if attrib.required %} required {% endif %}
 | 
			
		||||
                >
 | 
			
		||||
                    {% for option in attrib.options -%}
 | 
			
		||||
                        <option value="{{ option }}">{{ option }}</option>
 | 
			
		||||
                        <option value="{{ option }}" {% if item and item[attrib.attrib_name] == option %}selected{% endif %}>{{ option }}</option>
 | 
			
		||||
                    {% endfor %}
 | 
			
		||||
                </select>
 | 
			
		||||
            {% else %}
 | 
			
		||||
@ -41,12 +41,16 @@
 | 
			
		||||
                    {% if attrib.max_length is not none %} maxlength="{{ attrib.max_length }}" {% endif %}
 | 
			
		||||
                    {% if attrib.min_length is not none %} minlength="{{ attrib.min_length }}" {% endif %}
 | 
			
		||||
                    {% if attrib.regex is not none %} pattern="{{ attrib.regex }}" {% endif %}
 | 
			
		||||
                    {% if attrib.default_val is not none %} value="{{ attrib.default_val }}" {% endif %}
 | 
			
		||||
                    {% if item %}
 | 
			
		||||
                        value="{{ item[attrib.attrib_name] }}"
 | 
			
		||||
                    {% else %}
 | 
			
		||||
                        {% if attrib.default_val is not none %} value="{{ attrib.default_val }}" {% endif %}
 | 
			
		||||
                    {% endif %}
 | 
			
		||||
                />
 | 
			
		||||
            {% endif %}
 | 
			
		||||
        </p>
 | 
			
		||||
        {% endfor %}
 | 
			
		||||
        <p><input type="submit" value="Submit" /></p>
 | 
			
		||||
        <p><input type="submit" value="{% if item %}Update{% else %}Submit{% endif %}" /></p>
 | 
			
		||||
        <button type="button" onclick="window.location.href='/'">Cancel</button>
 | 
			
		||||
    </form>
 | 
			
		||||
</body>
 | 
			
		||||
@ -1,51 +0,0 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
    <meta charset="UTF-8">
 | 
			
		||||
    <title>Update Item</title>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
    <h2 align="center">Update Item</h2>
 | 
			
		||||
 | 
			
		||||
    <!-- Display error message if any -->
 | 
			
		||||
    {% if error %}
 | 
			
		||||
        <p>{{ error }}</p>
 | 
			
		||||
    {% endif %}
 | 
			
		||||
 | 
			
		||||
    <!-- Form for updating an item -->
 | 
			
		||||
    <form method="POST">
 | 
			
		||||
        {% for attrib in item_attributes -%}
 | 
			
		||||
        <p>
 | 
			
		||||
            <label for="{{ attrib.attrib_name }}">{{ attrib.display_name }}:</label>
 | 
			
		||||
            {% if attrib.html_input_type == "select" %}
 | 
			
		||||
                <!-- Render a dropdown for select attributes -->
 | 
			
		||||
                <select
 | 
			
		||||
                    id="{{ attrib.attrib_name }}"
 | 
			
		||||
                    name="{{ attrib.attrib_name }}"
 | 
			
		||||
                    {% if attrib.required %} required {% endif %}
 | 
			
		||||
                >
 | 
			
		||||
                    {% for option in attrib.options -%}
 | 
			
		||||
                        <option value="{{ option }}" {% if item[attrib.attrib_name] == option %}selected{% endif %}>{{ option }}</option>
 | 
			
		||||
                    {% endfor %}
 | 
			
		||||
                </select>
 | 
			
		||||
            {% else %}
 | 
			
		||||
                <!-- Render an input field for other attributes -->
 | 
			
		||||
                <input
 | 
			
		||||
                    id="{{ attrib.attrib_name }}"
 | 
			
		||||
                    type="{{ attrib.html_input_type }}"
 | 
			
		||||
                    name="{{ attrib.attrib_name }}"
 | 
			
		||||
                    {% if attrib.required %} required {% endif %}
 | 
			
		||||
                    {% if attrib.html_input_type == "number" %}
 | 
			
		||||
                        {% if attrib.min_val is not none %} min="{{ attrib.min_val }}" {% endif %}
 | 
			
		||||
                        {% if attrib.max_val is not none %} max="{{ attrib.max_val }}" {% endif %}
 | 
			
		||||
                    {% endif %}
 | 
			
		||||
                    {% if item[attrib.attrib_name] %} value="{{ item[attrib.attrib_name] }}" {% endif %}
 | 
			
		||||
                />
 | 
			
		||||
            {% endif %}
 | 
			
		||||
        </p>
 | 
			
		||||
        {% endfor %}
 | 
			
		||||
        <p><input type="submit" value="Update" /></p>
 | 
			
		||||
        <button type="button" onclick="window.location.href='/'">Cancel</button>
 | 
			
		||||
    </form>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user