#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? Ваше здоровье.