Django - Фильтрация связанных наборов в шаблонах - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть две модели;

class Customer(models.Model):
    first_name = models.CharField(max_length=20)
    last_name = models.CharField(max_length=20)
    email = models.EmailField()

class WorkOrder(models.Model):
    date_created = models.DateField('Date', default=datetime.now)
    due_date = models.DateField('Due Date')
    customer = models.ForeignKey(Customer, on_delete=models.CASCADE, verbose_name='Customer')
    STATUS_CHOICES = [
        ('pending', 'Pending'),
        ('approved', 'Approved'),
        ('completed', 'Completed'),
        ('cancelled', 'Cancelled'),
    ]
    status = models.CharField('Status of the work order', max_length=10, choices=STATUS_CHOICES, default='pending')
    description = models.TextField('Description of the work')

Я написал представление списка на основе классов, чтобы составить список клиентов:


class ReportCustomerListView(ListView):

    model = CustomUser
    template_name = 'reports/customer_report.html'

    def get_queryset(self):

        return CustomUser.objects.filter(is_staff=False).filter(is_superuser=False)

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

<table class="table table-striped">
        <thead>
            <tr>
                <th scope="col">#</th>
                <th scope="col">First Name</th>
                <th scope="col">Last Name</th>
                <th scope="col">Company</th>
                <th scope="col">Pending Work Orders</th>
                <th scope="col">Active Work Orders</th>
                <th scope="col">Completed Work Orders</th>
                <th scope="col">Draft Bills</th>
            </tr>
        </thead>
            <tbody>
                {% for customer in object_list %}
                <tr>
                    <th scope="row">{{ forloop.counter }}</th>
                    <td>{{ customer.first_name }}</td>
                    <td>{{ customer.last_name }}</td>
                    <td>{{ customer.company.company_name }}</td>
                    ...
                    ...
                    ... // the part where I am stuck

Но я теряюсь после этого после 4 часов чтения, я в замешательстве. Я знаю, что могу получить доступ к рабочим заказам с

>>> Users.objects.get(pk=pk).workorder_set

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

Другие методы, такие как фильтрация по представлениям, также будут работать для меня, но, опять же, я не знаю, как это сделать.

Большое спасибо за ваше время ...

1 Ответ

0 голосов
/ 01 апреля 2020

если вы хотите получить связанные объекты, попробуйте установить django-taggit в своем приложении и попробовать этот код ... views.py

def tagged(request, slug):
tag = get_object_or_404(Tag, slug=slug)
# Filter posts by tag name  
posts = Post.objects.filter(tags=tag)
context = {
    'tag':tag,
    'posts':posts,
}
...