Дополнительный кверисет в DetailView (с использованием self)
Я создаю приложение для управления домашним бюджетом. У меня есть несколько моделей - Дата, Расход, Категория, Доход.
Выглядит это следующим образом
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')
Сначала пользователь должен выбрать "Date", затем он переходит к DateDetailView. И в этом DetailView я хочу отобразить расходы только за эту дату. Я пробовал использовать objects.filter, но не знаю, как правильно его написать.
Я написал что-то вроде этого
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
Я также попробовал следующее
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
У вас есть какие-нибудь идеи? Спасибо!
Отлично, я нашел решение.
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