Django -Помощь отображения контента во вложенном цикле - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть заявка, которая может иметь несколько строк. Поэтому, чтобы реализовать это, я включил ограничение unique_together в два поля в модели RequisitionLine, одним из которых является FK to Requisition. Поэтому, естественно, чтобы вытащить все строки заявки, я бы запросил таблицу RequisitionLine, где FK = идентификатор модели заявки, а затем перебрал бы все последовательности, чтобы захватить все строки.

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

Models.py

class Requisition(models.Model):
    username = models.ForeignKey(
        'users.CustomUser', on_delete=models.CASCADE, related_name='req_user')

    signature = models.CharField(max_length=10, blank=True, null=True)



class RequisitionLine(models.Model):

    parent_req = models.ForeignKey('Requisition', on_delete=models.CASCADE, related_name='par_req_line' )
    sequence = models.PositiveIntegerField()
    item_code = models.ForeignKey(
        'items.ItemMaster', on_delete=models.CASCADE, related_name='req_item', blank=True, null=True)
    description = models.CharField(max_length=50, blank=True)
    extra_information = models.TextField(blank=True)
    quantity = models.PositiveIntegerField(blank=True, default=0,null=True)
    price = models.DecimalField(max_digits=19, decimal_places=2, blank=True, default=0.00,null=True)
    purchase_order = models.CharField(max_length=9, blank=True,null=True)
    po_line = models.PositiveSmallIntegerField(blank=True,null=True)
    req_delivery_date = models.DateField(blank=True,null=True)
    act_delivar_date = models.DateField(blank=True, null=True)
    status = models.ForeignKey('RequisitionStatus', related_name='req_status', on_delete=models.CASCADE, blank=True, null=True)
    assistance = models.ForeignKey('users.UserRoles', related_name='req_assist', blank=True, null=True, on_delete=models.CASCADE, limit_choices_to= ~Q(role='Requestor'))
    catagory = models.ForeignKey('items.ItemCatagory', on_delete=models.CASCADE, related_name='line_cat',  blank=True, null=True)
    notes = models.TextField(blank=True)

    class Meta:
        unique_together = ('parent_req','sequence')

Views.py

def pending_action(request):
user = CustomUser.objects.get(username=request.user)
user_req_headers = Requisition.objects.filter(username=user)
complete_status = RequisitionStatus.objects.get(status='Completed')
req_line_list = []

for req_header in user_req_headers:
    req_lines = RequisitionLine.objects.filter(Q(parent_req = req_header) & ~Q(status=complete_status))
    req_line_list.append(req_lines)

return render(request, 'req/pending_action.html', {'user_req_headers':user_req_headers,'req_line_list':req_line_list}) 

pending_action.html

{% for header in user_req_headers %}    
    <h3>{{header}}</h3>
    {% for req_line in req_line_list %}
    {% for req in req_line %}    
    <table>
        {% if forloop.first  %}
        <tr>
            <th>description</th>
            <th>catagory</th>
        </tr>
        {% endif %}
        <tr>
            <!-- FOR LOOP HERE TO ITERATE OF LIST OF QUERYSETS-->

            <td>{{ req }}</td>

        </tr>
    </table>
    {% endfor %}
    {% endfor %}
{% endfor %}

1 Ответ

0 голосов
/ 06 сентября 2018

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

<table class="table">
        {% for req_header in req_header_list %}
            <tr>

                <ul>{{ req_header }}
                {% for line in req_header.par_req_line.all %}
                    <li>{{line}}</li>
                {% endfor %}
                </ul>
            </tr>

        {% endfor %}

    </table>
...