Django - получение списка полей в наборе запросов - PullRequest
0 голосов
/ 04 февраля 2020

Мне нужна помощь в получении списка полей в наборе запросов.

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

Если я это сделаю .values как показано ниже

abc = PrescribedMedsSchedule.objects.filter(medication_date=scheduled_date_obj, medication_time__time=scheduled_time_obj) \
        .select_related('prescribed_meds_id') \
        .select_related('prescribed_meds_id__childno') \
        .values(
            'prescribed_meds_id',
            'medication_date', 
            'medication_time', 
            'quantity',
            'form',
            'prescribed_meds_id__name_of_medication', 
            'prescribed_meds_id__childno__child_name',
            'prescribed_meds_id__childno__group',
            'prescribed_meds_id__childno__line_no'
            ).order_by('prescribed_meds_id__name_of_medication')

Я получаю точные имена столбцов, которые можно использовать в шаблоне, когда я набираю ab c в оболочке. QuerySet [{'prescribed_meds_id': 5731, 'medication_date': datetime.date(2020, 2, 4), ....

Но если я использую .only вместо .values ​​, когда я набираю ab c, я получаю QuerySet [<PrescribedMedsSchedule: PrescribedMedsSchedule object (6117) ....

Как я могу получить / отобразить поля / столбцы в этом наборе запросов?

Причина, по которой я спрашиваю, состоит в том, что поля в таблицах select_related больше не отображаются в шаблоне HTML при использовании .only.

1 Ответ

0 голосов
/ 19 февраля 2020

Используйте QuerySet.values ​​, если вы хотите, чтобы результирующий набор запросов содержал словари, и QuerySet.only , если вы хотите, чтобы результирующий набор запросов содержал экземпляры модели.

Вы Можно заметить, что результат запроса с использованием values или orders совпадает при печати его в терминале.

print(abc.query)

Если вы все еще хотите использовать QuerySet.only и получать результаты набора запросов как итерацию из экземпляры модели, затем вы можете получить доступ к связанным полям с помощью оператора точки. Например, чтобы вывести дочернее имя в шаблоне:

{% for a in abc %}
  {{ a.prescribed_meds_id.childno.child_name }}
{% endfor %}
...