Modified the models to link the categories to the user

This commit is contained in:
JKuijperM 2026-01-09 13:26:07 +01:00
parent b46b00eab1
commit 64b68cb4b9
3 changed files with 26 additions and 12 deletions

View File

@ -1,7 +1,17 @@
from django import forms
from .models import Expense
from .models import Expense, Category
class ExpenseForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
# Get user
user = kwargs.pop('user', None)
super().__init__(*args, **kwargs)
if user:
self.fields['category'].queryset = Category.objects.filter(owner=user)
class Meta:
model = Expense
fields = [

View File

@ -4,8 +4,14 @@ from django.db.models.fields import related
class Category(models.Model):
name = models.CharField(max_length=100)
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name="categories",
)
parent = models.ForeignKey(
"self",
'self',
on_delete=models.CASCADE,
null=True,
blank=True,
@ -13,7 +19,7 @@ class Category(models.Model):
)
class Meta:
unique_together = ("name", "parent")
unique_together = ("name", "parent", "owner")
verbose_name_plural = "categories"
def __str__(self):
@ -60,9 +66,7 @@ class Expense(models.Model):
category = models.ForeignKey(
Category,
on_delete=models.SET_NULL,
null=True,
blank=True,
on_delete=models.PROTECT,
related_name="expenses",
)

View File

@ -1,7 +1,7 @@
from .models import Expense
from .forms import ExpenseForm
from django.contrib.auth import login
from django.utils.ipv6 import is_valid_ipv6_address
from . models import Expense
from .forms import ExpenseForm
from django.shortcuts import get_object_or_404, render, redirect
from django.contrib.auth.decorators import login_required
@ -20,7 +20,7 @@ def expense_list(request):
@login_required
def expense_create(request):
if request.method == "POST":
form = ExpenseForm(request.POST)
form = ExpenseForm(request.POST or None, user=request.user)
if form.is_valid():
expense = form.save(commit=False)
expense.owner = request.user
@ -28,7 +28,7 @@ def expense_create(request):
form.save_m2m()
return redirect('expense_list')
else:
form = ExpenseForm()
form = ExpenseForm(user=request.user)
return render(
request,
@ -45,12 +45,12 @@ def expense_edit(request, pk):
owner=request.user,
)
if request.method == "POST":
form = ExpenseForm(request.POST, instance=expense)
form = ExpenseForm(request.POST or None, instance=expense, user=request.user)
if form.is_valid():
expense = form.save()
return redirect('expense_list')
else:
form = ExpenseForm(instance=expense)
form = ExpenseForm(instance=expense, user=request.user)
return render(
request,