Created the views and models for edit and delete

This commit is contained in:
JKuijperM 2026-01-08 18:40:18 +01:00
parent d0eeaa2c18
commit 1cc49ae655
8 changed files with 207 additions and 3 deletions

View File

@ -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'}),
}

View File

@ -0,0 +1,27 @@
<!DOCTYPE html>
<html>
<head>
<title>Borrar gasto</title>
</head>
<body>
<h1>Borrar gasto</h1>
<p>
¿Seguro que quieres borrar este gasto?
</p>
<ul>
<li>Fecha: {{ expense.date }}</li>
<li>Importe: {{ expense.amount }}</li>
<li>Categoría: {{ expente.category }}</li>
</ul>
<form method="post">
{% csrf_token %}
<button type="submit">Sí, borrar</button>
</form>
<a href="{% url 'expense_list' %}">Cancelar</a>
</body>
</html>

View File

@ -0,0 +1,36 @@
<!DOCTYPE html>
<html>
<head>
<title>
{% if form.instance.pk %}
Editar gasto
{% else %}
Nuevo gasto
{% endif %}
</title>
</head>
<body>
<h1>
{% if form.instance.pk %}
Editar gasto
{% else %}
Nuevo gasto
{% endif %}
</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">
{% if form.instance.pk %}
Guardar gasto
{% else %}
Crear gasto
{% endif %}
</button>
</form>
<a href="{% url 'expense_list' %}">Volver</a>
</body>
</html>

View File

@ -0,0 +1,36 @@
<!DOCTYPE html>
<html>
<head>
<title>Gastos</title>
</head>
<body>
<h1>Mis gastos</h1>
<a href="{% url 'expense_create' %}">Añadir gasto</a>
<table border="1">
<tr>
<th>Fecha</th>
<th>Importe</th>
<th>Categoría</th>
<th>Cuenta</th>
<th>Acciones</th>
</tr>
{% for expense in expenses %}
<tr>
<td>{{ expense.date }}</td>
<td>{{ expense.amount }}</td>
<td>{{ expense.category }}</td>
<td>{{ expense.account }}</td>
<td> <a href="{% url 'expense_edit' expense.pk %}">Editar</a></td>
<td> <a href="{% url 'expense_delete' expense.pk %}">Borrar</a></td>
</tr>
{% empty %}
<tr>
<td colspan="4">No hay gastos todavía</td>
</tr>
{% endfor %}
</table>
</body>
</html>

View File

@ -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('<int:pk>/edit/', views.expense_edit, name='expense_edit'),
path('<int:pk>/delete/', views.expense_delete, name='expense_delete'),
]

View File

@ -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},
)

View File

@ -128,3 +128,6 @@ STATIC_URL = 'static/'
# https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field # https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
LOGIN_URL = '/admin/login/'
LOGIN_REDIRECT_URL = '/'

View File

@ -15,8 +15,9 @@ Including another URLconf
2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
""" """
from django.contrib import admin from django.contrib import admin
from django.urls import path from django.urls import path, include
urlpatterns = [ urlpatterns = [
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
path('', include('expenses.urls')),
] ]