- Remove user ForeignKey from all 7 models (single-user app) - Update all views, handlers, forms, admin, API, seed, and tests - Add MonthlyGoal model with goals and promises sections - Goals/promises: add, toggle (strikethrough), delete via LiveView
58 lines
1.3 KiB
Python
58 lines
1.3 KiB
Python
from django.db import models
|
|
|
|
|
|
class Category(models.Model):
|
|
name = models.CharField(max_length=100)
|
|
order = models.PositiveIntegerField(default=0)
|
|
|
|
class Meta:
|
|
ordering = ["order", "name"]
|
|
verbose_name_plural = "categories"
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
|
|
class Subcategory(models.Model):
|
|
name = models.CharField(max_length=100)
|
|
category = models.ForeignKey(
|
|
Category, on_delete=models.CASCADE, related_name="subcategories"
|
|
)
|
|
order = models.PositiveIntegerField(default=0)
|
|
|
|
class Meta:
|
|
ordering = ["order", "name"]
|
|
verbose_name_plural = "subcategories"
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
|
|
class FixedExpenseConcept(models.Model):
|
|
name = models.CharField(max_length=255)
|
|
order = models.PositiveIntegerField(default=0)
|
|
|
|
class Meta:
|
|
ordering = ["order", "name"]
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
|
|
class Expense(models.Model):
|
|
concept = models.CharField(max_length=255)
|
|
amount = models.DecimalField(max_digits=10, decimal_places=2)
|
|
category = models.ForeignKey(
|
|
Category, on_delete=models.PROTECT, related_name="expenses"
|
|
)
|
|
subcategory = models.ForeignKey(
|
|
Subcategory, on_delete=models.PROTECT, related_name="expenses"
|
|
)
|
|
created_at = models.DateTimeField(auto_now_add=True)
|
|
|
|
class Meta:
|
|
ordering = ["-created_at"]
|
|
|
|
def __str__(self):
|
|
return f"{self.concept} - {self.amount}€"
|