Created the views and models for edit and delete
This commit is contained in:
parent
d0eeaa2c18
commit
1cc49ae655
17
expenses_manager/expenses/forms.py
Normal file
17
expenses_manager/expenses/forms.py
Normal 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'}),
|
||||||
|
}
|
||||||
@ -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>
|
||||||
@ -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>
|
||||||
@ -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>
|
||||||
9
expenses_manager/expenses/urls.py
Normal file
9
expenses_manager/expenses/urls.py
Normal 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'),
|
||||||
|
]
|
||||||
@ -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},
|
||||||
|
)
|
||||||
@ -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 = '/'
|
||||||
@ -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')),
|
||||||
]
|
]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user