From 1cc49ae655e6d032ee62ddc93c8101a385795279 Mon Sep 17 00:00:00 2001 From: JKuijperM Date: Thu, 8 Jan 2026 18:40:18 +0100 Subject: [PATCH] Created the views and models for edit and delete --- expenses_manager/expenses/forms.py | 17 ++++ .../expenses/expense_confirm_delete.html | 27 +++++++ .../templates/expenses/expense_form.html | 36 +++++++++ .../templates/expenses/expense_list.html | 36 +++++++++ expenses_manager/expenses/urls.py | 9 +++ expenses_manager/expenses/views.py | 79 ++++++++++++++++++- expenses_manager/expenses_manager/settings.py | 3 + expenses_manager/expenses_manager/urls.py | 3 +- 8 files changed, 207 insertions(+), 3 deletions(-) create mode 100644 expenses_manager/expenses/forms.py create mode 100644 expenses_manager/expenses/templates/expenses/expense_confirm_delete.html create mode 100644 expenses_manager/expenses/templates/expenses/expense_form.html create mode 100644 expenses_manager/expenses/templates/expenses/expense_list.html create mode 100644 expenses_manager/expenses/urls.py diff --git a/expenses_manager/expenses/forms.py b/expenses_manager/expenses/forms.py new file mode 100644 index 0000000..b180361 --- /dev/null +++ b/expenses_manager/expenses/forms.py @@ -0,0 +1,17 @@ +from django import forms +from .models import Expense + +class ExpenseForm(forms.ModelForm): + class Meta: + model = Expense + fields = [ + 'date', + 'amount', + 'description', + 'category', + 'account', + 'tags', + ] + widgets = { + 'date': forms.DateInput(attrs={'type': 'date'}), + } \ No newline at end of file diff --git a/expenses_manager/expenses/templates/expenses/expense_confirm_delete.html b/expenses_manager/expenses/templates/expenses/expense_confirm_delete.html new file mode 100644 index 0000000..926f72e --- /dev/null +++ b/expenses_manager/expenses/templates/expenses/expense_confirm_delete.html @@ -0,0 +1,27 @@ + + + + Borrar gasto + + + +

Borrar gasto

+ +

+ ¿Seguro que quieres borrar este gasto? +

+ + + +
+ {% csrf_token %} + +
+ + Cancelar + + \ No newline at end of file diff --git a/expenses_manager/expenses/templates/expenses/expense_form.html b/expenses_manager/expenses/templates/expenses/expense_form.html new file mode 100644 index 0000000..5828676 --- /dev/null +++ b/expenses_manager/expenses/templates/expenses/expense_form.html @@ -0,0 +1,36 @@ + + + + + {% if form.instance.pk %} + Editar gasto + {% else %} + Nuevo gasto + {% endif %} + + + + +

+ {% if form.instance.pk %} + Editar gasto + {% else %} + Nuevo gasto + {% endif %} +

+ +
+ {% csrf_token %} + {{ form.as_p }} + +
+ + Volver + + \ No newline at end of file diff --git a/expenses_manager/expenses/templates/expenses/expense_list.html b/expenses_manager/expenses/templates/expenses/expense_list.html new file mode 100644 index 0000000..2e9440e --- /dev/null +++ b/expenses_manager/expenses/templates/expenses/expense_list.html @@ -0,0 +1,36 @@ + + + + Gastos + + +

Mis gastos

+ + Añadir gasto + + + + + + + + + + {% for expense in expenses %} + + + + + + + + + {% empty %} + + + + + {% endfor %} +
FechaImporteCategoríaCuentaAcciones
{{ expense.date }}{{ expense.amount }}{{ expense.category }}{{ expense.account }} Editar Borrar
No hay gastos todavía
+ + \ No newline at end of file diff --git a/expenses_manager/expenses/urls.py b/expenses_manager/expenses/urls.py new file mode 100644 index 0000000..14457e4 --- /dev/null +++ b/expenses_manager/expenses/urls.py @@ -0,0 +1,9 @@ +from . import views +from django.urls import path + +urlpatterns = [ + path('', views.expense_list, name='expense_list'), + path('new/', views.expense_create, name='expense_create'), + path('/edit/', views.expense_edit, name='expense_edit'), + path('/delete/', views.expense_delete, name='expense_delete'), +] \ No newline at end of file diff --git a/expenses_manager/expenses/views.py b/expenses_manager/expenses/views.py index 91ea44a..bacdb89 100644 --- a/expenses_manager/expenses/views.py +++ b/expenses_manager/expenses/views.py @@ -1,3 +1,78 @@ -from django.shortcuts import render +from django.contrib.auth import login +from django.utils.ipv6 import is_valid_ipv6_address +from . models import Expense +from .forms import ExpenseForm -# Create your views here. +from django.shortcuts import get_object_or_404, render, redirect +from django.contrib.auth.decorators import login_required + +@login_required +def expense_list(request): + expenses = Expense.objects.filter(owner=request.user) + + return render ( + request, + 'expenses/expense_list.html', + {'expenses': expenses}, + ) + + +@login_required +def expense_create(request): + if request.method == "POST": + form = ExpenseForm(request.POST) + if form.is_valid(): + expense = form.save(commit=False) + expense.owner = request.user + expense.save() + form.save_m2m() + return redirect('expense_list') + else: + form = ExpenseForm() + + return render( + request, + 'expenses/expense_form.html', + {'form': form}, + ) + + +@login_required +def expense_edit(request, pk): + expense = get_object_or_404( + Expense, + pk=pk, + owner=request.user, + ) + if request.method == "POST": + form = ExpenseForm(request.POST, instance=expense) + if form.is_valid(): + expense = form.save() + return redirect('expense_list') + else: + form = ExpenseForm(instance=expense) + + return render( + request, + 'expenses/expense_form.html', + {'form': form} + ) + + +@login_required +def expense_delete(request, pk): + expense = get_object_or_404( + Expense, + pk=pk, + owner=request.user, + ) + + if request.method == 'POST': + expense.delete() + return redirect('expense_list') + + return render( + request, + 'expenses/expense_confirm_delete.html', + {'expense': expense}, + ) \ No newline at end of file diff --git a/expenses_manager/expenses_manager/settings.py b/expenses_manager/expenses_manager/settings.py index 4983077..774e834 100644 --- a/expenses_manager/expenses_manager/settings.py +++ b/expenses_manager/expenses_manager/settings.py @@ -128,3 +128,6 @@ STATIC_URL = 'static/' # https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + +LOGIN_URL = '/admin/login/' +LOGIN_REDIRECT_URL = '/' \ No newline at end of file diff --git a/expenses_manager/expenses_manager/urls.py b/expenses_manager/expenses_manager/urls.py index ae9fa2b..d509080 100644 --- a/expenses_manager/expenses_manager/urls.py +++ b/expenses_manager/expenses_manager/urls.py @@ -15,8 +15,9 @@ Including another URLconf 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin -from django.urls import path +from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), + path('', include('expenses.urls')), ]