Примените фильтр к ребенку, который находится в его родительском цикле - PullRequest
0 голосов
/ 02 февраля 2020

Это сводит меня с ума (я действительно искал повсюду - но я знаю, что это должно быть легко, и я немного задумываюсь)

Как мне добавить фильтр к дочернему элементу родителя (один ко многим)? Приведенный ниже код предоставляет список компаний в таблице, затем на той же странице / в таблице каждая компания имеет список «начислений», который присваивается этой компании; Благодаря ForeignKey и использованию "charge_set" он прекрасно работает. Тем не менее, я хотел бы добавить фильтр к «начислениям» за статус (исключая «непогашенный» статус)

В ROR я бы просто поместил следующий

<% company.charges.where(status: "Outstanding").each do |charge| %>

AIUI, Я не могу сделать это с Python / Django в представлении; так как бы я go добавил простой фильтр к потомку родителя в этом l oop?


from django.db import models

class Company(models.Model):
    name = models.CharField(max_length=100)

class Charge(models.Model):
    company = models.ForeignKey(Company, on_delete=models.CASCADE)
    charge_id = models.CharField(max_length=100)
    status = models.CharField(max_length=100)

from django.shortcuts import render
from companies.models import Company, Charge, Filing
from django.http import HttpResponse

def watch_list(request):
    companies = Company.objects.order_by('-data_date')

    return render(request,'company_watch/watch_list.html',{'companies':companies})

{% for company in companies %}
<tr>
   <td>{{company.name}}</td>
   <td>
      <ul>
         {% for charge in company.charge_set.all %}
         <li>{{charge.charge_id}}</li>
         {% endfor %}
      </ul>
   </td>
</tr>
{% endfor %}

1 Ответ

1 голос
/ 02 февраля 2020

Вы можете просто взять company и отфильтровать детей. Если вы хотите, чтобы дети на бэкэнде:

company = Company.objects.get('...')
outstanding_children = Charge.objects.filter(company = company, status = "Outstanding")

Если вы хотите отобразить детей на внешнем интерфейсе:

{% for company in companies %}
<tr>
   <td>{{company.name}}</td>
   <td>
      <ul>
         {% for charge in company.charge_set.all %}
             {% if charge.status == "Outstanding" %} 
                 <li>{{charge.charge_id}}</li>
             {% endif %}
         {% endfor %}
      </ul>
   </td>
</tr>
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...