I am creating application to manage home budget. I've got a few models - Date, Expense, Category, Income.
It looks like this
class Date(models.Model):
name = models.CharField(max_length = 15)
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='date')
class Category(models.Model):
name = models.CharField(max_length=100)
budget = models.DecimalField(max_digits=8, decimal_places=2)
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='category')
date = models.ForeignKey(Date, on_delete=models.CASCADE, related_name='date', default='Styczeń 2022')
class Expense(models.Model):
name = models.CharField(max_length=100)
amount = models.DecimalField(max_digits=8, decimal_places=2)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
account = models.ForeignKey(Account, on_delete=models.CASCADE, related_name="account")
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='expense')
date = models.ForeignKey(Date, on_delete=models.CASCADE, default='Styczeń 2022')
class Income(models.Model):
name = models.CharField(max_length=100)
amount = models.DecimalField(max_digits=8, decimal_places=2)
account = models.ForeignKey(Account, on_delete=models.CASCADE, related_name="account_income")
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='income')
First of all user should choose a "Date", next it goes to DateDetailView. And on this DetailView I want to display Expense only for this Date. I tried with objects.filter, but I don't know how I should write it properly.
I wrote something like this
class DateDetailView(DetailView):
model = Date
template_name = 'expense/date_detail.html'
context_object_name = 'date'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['expense'] = Expense.objects.filter(date=F('pk'))
return context
I also tried this
class DateDetailView(DetailView):
model = Date
template_name = 'expense/date_detail.html'
context_object_name = 'date'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['expense'] = Expense.objects.filter(date=self.date)
return context
Have you got any ideas? Thanks!
Okey, I found a solution.
class DateDetailView(DetailView):
model = Date
template_name = 'expense/date_detail.html'
context_object_name = 'date'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['expense'] = Expense.objects.filter(date=self.object)
return context