Один из способов - извлечь функцию. Вам также необходимо сформировать размеры таблицы из результата запроса:
def write_column(col, record):
cells = column.cells
for i, field in record:
cells[i].text = field
records = Model.objects.filter(pk=pk)
table = document.add_table(rows=len(records[0]), cols=len(records))
for i, record in enumerate(records):
write_column(table.columns[i], record)
Вы не указали тип объекта record
, поэтому я принял список здесь. Вам могут потребоваться некоторые корректировки в зависимости от специфики.
Если поля записи доступны только по имени атрибута (например, .data1
, .data2
и т. Д. c.), Вам необходимо включить или получить информация о схеме для создания этого сопоставления, которая может повлиять на гибкость этого кода в отношении изменений схемы (например, при использовании для нескольких типов записей).