Используйте две модели в ListView - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть ListView для каждой бюджетной категории в моем списке транзакций.Для каждого из этих просмотров я хотел бы показать фактический бюджет для этой категории.Например, мой бюджет Билла имеет суб-бюджеты на аренду, страховку, телефон и т. Д., Которые хранятся в отдельной модели от транзакций.Текущий ListView просто отправляет транзакции, отфильтрованные по типу бюджета:

class BillListView(ListView):
    model = Transaction
    template_name = 'budget/base_transactions.html'
    context_object_name = 'transactions'
    paginate_by = 10
    queryset = Transaction.objects.filter(budget_type__exact='bill')

Можно ли также отправить данные суббюджета из моей базы данных бюджета, чтобы я мог отобразить их в верхней части шаблона?

Мои модели:

class Transaction(models.Model):
    date = models.DateField(default=datetime.date.today)
    description = models.CharField(max_length=100, default="")
    category = models.CharField(max_length=100, default="")
    amount = models.DecimalField(max_digits=10, decimal_places=2, default=0.0)
    budget_type = models.CharField(max_length=100, default="")

    def __str__(self):
        return self.description + ' ' + str(self.amount)

class Budget(models.Model):
    category = models.CharField(max_length=100, default="")
    sub_category = models.CharField(max_length=100, default="")
    amount = models.DecimalField(max_digits=10, decimal_places=2, default=0.0)

1 Ответ

2 голосов
/ 16 апреля 2019

Если вы хотите передать данные другой модели через ListView, вам может потребоваться переопределить метод get_context_data для ListView.Затем вы сможете передавать необходимые данные вместе с объектами нашей модели.

Например:

В вашем контексте, где вы хотите показать данные об объектах бюджета, вы можете изменить свой BillListView просмотреть как:

class BillListView(ListView):
    model = Transaction
    template_name = 'budget/base_transactions.html'
    context_object_name = 'transactions'
    paginate_by = 10
    queryset = Transaction.objects.filter(budget_type__exact='bill')

    def get_context_data(self, **kwargs):
        context = super(BillListView, self).get_context_data(**kwargs)
        context['budgets'] = Budget.objects.filter(category__exact='bill') //filter as per required
        return context

Затем вы можете получить доступ к budget объектам в шаблоне, просматривая budgets как:

{% for budget in budgets %}
    {{ budget.amount }}
    {{ budget.sub_category }}
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...