Словари в представлениях Django: Перебор словаря, содержащего пары ключ-набор запросов

#django #dictionary #refactoring #django-queryset #detailview

Вопрос:

В настоящее время у меня есть очень раздутая функция детального просмотра в моем модуле представлений Django. Основная причина этого заключается в том, что я создаю списки из словарей (между 2-50 парами ключ-значение), повторяя каждый словарь и добавляя результат в уникальный список. Затем эти списки становятся доступными для шаблонов для дальнейшей итерации и отображения. Вот пример списка из кода словаря в функции детального представления в представлениях:

 def bacteria_detail_view(request, slug): ...  temperature = []  temp_dict = {'low': My_model.growth_temp_low, 'room_temp': My_model.growth_temp_room,   'body_temp': My_model.growth_temp_body, 'high': My_model.growth_temp_high}  for key, val in temp_dict.items():  if val is not None:  temperature.append(val) ...  

Затем это отображается в шаблоне:

 lt;ligt;  {% if temperature %}  lt;i style="color: blue"gt;lt;bgt;Tlt;/bgt;emperature tolerance:lt;/igt;  {% for t in temperature %}  {{ t|growstemp|default_if_none:''}}  {% endfor %}  {% endif %} lt;/ligt;  

К итерированному объекту применяется пользовательский фильтр шаблона:

 @register.filter(name='growstemp') def growstemp(value):  if value:  if " " in value:  value = value.replace("( )", "")  return f"grows at {value}u2103;"  elif "neg" in value:  value = value.replace("(neg)", "")  return f"doesn't grow at {value}u2103;"  ...  else:  return ''  

Этот подход работает хорошо, но я подозреваю, что он не является оптимальным, и он переполняет функцию просмотра. Есть ли более прямой подход? Поскольку словари представляют собой пары ключ-набор запросов, есть ли лучший способ, например, получить доступ к модели «подробное имя»: «имя поля» пара ключ-значение программно? Или есть способ рефакторинга словарей и удаления их из модуля просмотра? Заранее спасибо.

Комментарии:

1. Можете ли вы привести пример того, что содержат эти атрибуты и как выглядит ваша модель? Когда вы говорите между 2-50 парами ключ-значение, вы имеете в виду, что вы создаете словарь с 50 ключами из 50 различных атрибутов в экземпляре?

2. Привет, Иэн, у меня есть модель с более чем 700 полями. Это связано с тем, что у меня gt;1300 бактерий, которые все имеют ~700 атрибутов (таким образом, матрица составляет примерно 1300*700 возможных точек данных). Каждый словарь, описанный выше, является подмножеством связанных имен полей; словарь «temp_dict» содержит только 4 такие пары ключ/значение. Я неправильно подхожу к этому? Должен ли я разбить модель на десятки моделей и использовать внешние ключи или поля many_to_many? Ваше здоровье.