Как устранить дублирующиеся данные, используя условие if в шаблоне django? - PullRequest
2 голосов
/ 23 марта 2020

Можно ли использовать условие if в шаблоне или html для устранения дублирующихся данных?

Примечание: у меня уже есть отдельные ядра в моих представлениях, но так как у меня есть 2 цикла в 1 дублирует некоторые данные.

это мои html

{% for core in cores %}
    {% for behavior in behaviors %}
        {% if core.Grading_Behavior__Grading_Behavior__Name == behavior.Grading_Behavior__Grading_Behavior__Name %}
            <tr>
                <td rowspan="2" colspan="4" class="tblcoretitle">{{core.Grading_Behavior__Grading_Behavior__Name}} 1</td>
                {% if core.Grading_Behavior__Grading_Behavior__GroupName == behavior.Grading_Behavior__Grading_Behavior__GroupName  %}
                    <td colspan="4" class="tblcore"> {{behavior.Grading_Behavior__Grading_Behavior__GroupName}}
                    </td>
                {% else %}
                {% endif %}
                <td class="tblcore">1</td>
                <td class="tblcore">2</td>
                <td class="tblcore">3</td>
                <td class="tblcore">4</td>
            </tr>
            <tr>
                {% if core.Grading_Behavior__Grading_Behavior__GroupName == behavior.Grading_Behavior__Grading_Behavior__GroupName  %}
                {% else %}
                    <td colspan="4" class="tblcore">{{behavior.Grading_Behavior__Grading_Behavior__GroupName}}
                    </td>
                {% endif %}
            </tr>
        {% endif %}
    {% endfor %}
{% endfor %}

это мои views.py

cores = StudentsBehaviorGrades.objects.filter(Teacher=teacher) \
        .filter(Students_Enrollment_Records__in=Students.values_list('id')).values('Grading_Behavior__Grading_Behavior__Name','Grading_Behavior__Grading_Behavior__GroupName').distinct('Grading_Behavior__Grading_Behavior__Name')\
    .order_by('Grading_Behavior__Grading_Behavior__Name')


behaviors = StudentsBehaviorGrades.objects.filter(Teacher=teacher) \
        .filter(Students_Enrollment_Records__in=Students.values_list('id')).filter().values('Grading_Behavior__Grading_Behavior__Name','Grading_Behavior__Grading_Behavior__GroupName').distinct('Grading_Behavior__Grading_Behavior__GroupName')\
    .order_by('Grading_Behavior__Grading_Behavior__GroupName')

это мой текущий результат

enter image description here

это мне нужен результат

enter image description here

приятель, если у вас есть лучшее решение или идея, поделитесь ответом.

ОБНОВЛЕНИЕ

когда я попробовал это в представлениях,

cores = StudentsBehaviorGrades.objects.filter(Teacher=teacher) \
        .filter(Students_Enrollment_Records__in=Students.values_list('id')).values(
        'Grading_Behavior__Grading_Behavior__Name', 'Grading_Behavior__Grading_Behavior__GroupName').distinct(
        'Grading_Behavior__Grading_Behavior__Name') \
        .order_by('Grading_Behavior__Grading_Behavior__Name')

    behaviors = StudentsBehaviorGrades.objects.filter(Teacher=teacher) \
        .filter(Students_Enrollment_Records__in=Students.values_list('id')).values(
        'Grading_Behavior__Grading_Behavior__Name', 'Grading_Behavior__Grading_Behavior__GroupName').distinct(
        'Grading_Behavior__Grading_Behavior__GroupName') \
        .order_by('Grading_Behavior__Grading_Behavior__GroupName')

    matches = cores.union(behaviors)

мой html

    {% for match in matches %}
        <tr>
            <td rowspan="2" colspan="4" class="tblcoretitle">{{match.Grading_Behavior__Grading_Behavior__Name}} 1</td>
        </tr>
        <tr>
            <td colspan="4" class="tblcore">{{match.Grading_Behavior__Grading_Behavior__GroupName}}</td>
            <td class="tblcore">1</td>
            <td class="tblcore">2</td>
            <td class="tblcore">3</td>
            <td class="tblcore">4</td>
        </tr>
    {% endfor %}

это результат:

enter image description here

он дублирует основные значения

Собирались решить эту пару, немного больше регулировки. заранее спасибо.

ОБНОВЛЕНИЕ еще раз

когда я использую

matches = itertools.chain(cores, behaviors)

результат

enter image description here

1 Ответ

1 голос
/ 23 марта 2020

Поскольку вы используете две фильтрации в одном и том же объекте, почему бы не объединить их, чтобы избежать дублирования, и использовать в своем шаблоне две for-l oop.

import itertools

cores = StudentsBehaviorGrades.objects.filter(Teacher=teacher) \
            .filter(Students_Enrollment_Records__in=Students.values_list('id')).values('Grading_Behavior__Grading_Behavior__Name','Grading_Behavior__Grading_Behavior__GroupName').distinct('Grading_Behavior__Grading_Behavior__Name')\
        .order_by('Grading_Behavior__Grading_Behavior__Name')


behaviors = StudentsBehaviorGrades.objects.filter(Teacher=teacher) \
            .filter(Students_Enrollment_Records__in=Students.values_list('id')).values('Grading_Behavior__Grading_Behavior__Name','Grading_Behavior__Grading_Behavior__GroupName').distinct('Grading_Behavior__Grading_Behavior__GroupName')\
        .order_by('Grading_Behavior__Grading_Behavior__GroupName')

matches = itertools.chain(cores, behaviors)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...