expenses_manager/expenses_manager/expenses/forms.py
2026-02-24 19:20:27 +01:00

81 lines
2.3 KiB
Python

from django import forms
from .models import Expense, Category, Income, Tag, Account, FuelEntry
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)
self.fields['tags'].queryset = Tag.objects.filter(owner=user)
self.fields['account'].queryset = Account.objects.filter(owner=user, active=True)
class Meta:
model = Expense
fields = [
'date',
'amount',
'description',
'category',
'account',
'tags',
]
widgets = {
'date': forms.DateInput(attrs={'type': 'date'}),
'widget': forms.CheckboxSelectMultiple(),
}
class TagForm(forms.ModelForm):
class Meta:
model = Tag
fields = ['name']
class AccountForm(forms.ModelForm):
class Meta:
model = Account
fields = ['name', 'initial_balance', 'active']
class IncomeForm(forms.ModelForm):
class Meta:
model = Income
fields = ['account', 'name', 'amount', 'date']
widgets = {
'date': forms.DateInput(attrs={'type': 'date'})
}
def __init__(self, *args, **kwargs):
user = kwargs.pop('user')
super().__init__(*args, **kwargs)
self.fields['account'].queryset = Account.objects.filter(
owner=user,
active=True,
)
class FuelEntryForm(forms.Form):
# Expense fields
date = forms.DateField(widget=forms.DateInput(attrs={'type': 'date'}))
amount = forms.DecimalField(max_digits=10, decimal_places=2)
account = forms.ModelChoiceField(queryset=None)
# Specifics fuel fields
odometer = forms.DecimalField(label='Current kilometers')
liters = forms.DecimalField(max_digits=8, decimal_places=2)
def __init__(self, *args, **kwargs):
user = kwargs.pop('user')
super().__init__(*args, **kwargs)
self.fields['account'].queryset = (
user.accounts.filter(active=True)
)
class CategoryForm(forms.ModelForm):
class Meta:
model = Category
fields = ['name', 'parent']