Django "List" и "Detail" Представления для строк с повторяющимися полями - PullRequest
0 голосов
/ 20 февраля 2019

Дублировать строки поля!Строки Duplicate Field!

Итак, у меня есть модель Application с полем school_name, которое может принимать дублирующиеся значения, среди других полей.Я ожидаю, что достигну: « список » всех дубликатов school name значений и их соответствующих значений, а также « detail "представление для каждого из дублированных полей в этом, когда я нажимаю на строку в моем представлении" список "(или что-то в этом роде), я могу просмотреть все строки, которые содержат это дублированное поле, иостальные поля для этой конкретной записи.

Я имею в виду следующее:

Вывод списка строк.Rows listed

Затем, когда я нажимаю на строку 1 (Технологический университет им. Дедана Кимати) или нажимаю кнопку с подробностями или что-то в этом роде для строки 1, я ожидаю получить это:

Row Details

Пока у меня есть 2 запроса:

duplicates = Application.objects.values('school_name').annotate(name_count=Count('school_name')).filter(name_count__gt=0)

Приведенный выше запрос возвращает дублирующиеся строки и их количество (как визображение 1), в то время как приведенное ниже,

records = Application.objects.filter(school_name__in=[item['school_name'] for item in duplicates])

возвращает другие поля для строк (как на изображении 2), только то, что оно приносит все строки в БД.

ЧтоЯ ожидаю, что, когда я нажимаю на строку в «списке», я получаю «подробное» представление со строками, которые имеют повторяющиеся значения для поля school_name.

Обратите внимание: яделаю это на моем views.py.

1 Ответ

0 голосов
/ 20 февраля 2019

Наконец-то я нашел решение своей проблемы :-) Итак, я создал в моих представлениях функцию, которая принимает дополнительный аргумент, а затем передает этот аргумент в URL и шаблон следующим образом

views.py

def school_detail(request, school_name):
    filtered_records = Application.objects.filter(school_name=school_name)
    context = {
        'repeated_names' : filtered_records,
        'duplicates' : duplicates,
        'title' : 'Disbursement Details',
    }

    return render(request, 'calculations/detail.html', context)

Затем в моем urls.py

path('list/<str:school_name>/', default_views.school_detail, name='dup_detail')

И, наконец, в моем шаблоне:

  {% for application in duplicates %}
             <tr class="clickabe-row" data-target="{% url 'dup_detail' application.school_name %}">
                <td>{{ forloop.counter}}</td>
                <td>{{ application.school_name}}</td>
                <td>{{ application.name_count}}</td>


             </tr>
                {% endfor %}

Работает как шарм.

...