Рубрики
Без рубрики

Использование переводов в качестве выбора модели Django

Наша цель в этом быстром обзоре – сделать наш выбор модели более организованным и читаемым, да … Tagged с Django, Python, Djangomodel.

Примечание

Как всегда предоставляемый код не готов к производству, это пример, показывающий обшивку некоторых методов, которые вы можете использовать для решения конкретной проблемы или задачи, позволяющей вам реализовать это в свой собственный код и рабочий процесс. Всегда узнайте это первым, не копируйте и вставьте 😅 Если вы это сделаете, убедитесь, что вы добавляете тесты, обработку ошибок и т. Д.

Перечисление в Python

Мы можем использовать встроенный Python Enum Class для создания четких, многократных констант не только для моделей, но и доступных для использования в другом месте. Если вы не уверены в концепции перечисления, вы можете просмотреть документы Python здесь.

Почему? Когда кортежи работают нормально …

Хороший момент … он работает нормально, и я не говорю, что вы не должны использовать это в качестве варианта. Это еще один подход или инструмент в вашем ящике для инструментов, который можно использовать, когда вам это нужно, и его уместно.

Рассуждение

Энм лучше всего использовать для представления неизменного набора значений, например, это будут дни недели и месяцев или какой -то произвольный набор константов в вашем заявке.

Сценарий

Наша воображаемая CRM System Cake CRM в настоящее время использует кортеж для типа клиента. Мы столкнулись с проблемой, когда инженеры используют неправильные значения в сравнении, мы также хотим использовать значения в других местах нашего приложения.

Пример

Наша текущая модель такова:

Давайте создадим новый файл utils.py в нашем приложении, и давайте перенесем customer_types в перечисление и обновить нашу модель, чтобы мы могли работать с Enums:

Давайте разбим то, что мы сделали:

  • Наши типы клиентов теперь – это класс, простирающийся от Intenum, у вас есть выбор использовать enum или intenum, убедитесь, что вы выбираете правильный для своего типа поля, вы не можете использовать Ints в обычном перечислении
  • Наш выбор теперь является свойствами этого класса
  • Мы внедрили @classmethod под названием «Выбор», который возвращает взаимодействие ORM Django, в настоящее время вы не можете просто передать перечисление в модель

Мы импортировали наш перечисление в наши модели.

  • Наш дефолт теперь изменился с 1 на репрезентативную ценность CustomerTypes. Перспектива
  • Мы также внедрили пользовательский метод на модели, чтобы вернуть титульное имя опции enum

Попытка использовать get_field_name_display всегда будет возвращать имя свойства All Caps, вы не можете переопределить это без обезьянного исправления или изменения того, как модели устанавливаются, но значение может быть изменено после факта, например, с использованием customer.get_type_display | заголовок в шаблоне

Теперь вы можете использовать эти представления о ценности в другом месте, например, мы хотели использовать это из объема моделей, вы можете просто сделать что -то вроде этого:

Такой подход, хотя еще несколько шагов дают лучший опыт при работе с констант в Джанго, некоторые из преимуществ, на мой взгляд, являются:

  • Гибкость, они не привязаны к классу модели или просто случайный фрагмент кода в ваших моделях.py
  • Лучше чтения, больше не пытаться понять, что означает случайный 1 или два буквенного кода
  • Упорядоченный и структурированный подход к константам сбора, используемых моделями

Опять же, нет ничего плохого в использовании кортежей, это еще один инструмент и подход решения конкретной проблемы.

Продолжайте и продолжайте кодировать 👍

Оригинал: “https://dev.to/bencleary89/using-enums-as-django-model-choices-4dk5”