Я использую язык шаблонов Django для вызова метода модели для создания динамических идентификаторов в соответствии с логикой для конкретного продукта.
Файлы JSON содержат информацию о конфигурации конкретного продукта.Я использую язык шаблонов Django в строках в файлах JSON, чтобы у каждого продукта была своя собственная логика для создания идентификаторов конкретных продуктов.Он прекрасно работает с вызовами из языка шаблонов Django.
У id_template есть вызов метода модели get_next_policy_id:
{
"model": "some name",
"product_id": "some product name",
"id_template": "{{ policy.get_next_product_id }}"
}
Вот соответствующий код из модели продукта.Вы можете увидеть метод, который предоставляет идентификатор, и метод сохранения условно использует его.
class Policy():
[...]
def get_next_policy_id_risk_strategies(self):
policy_num = -1
sequence_name = self.product.product_id + '-' + self.source_application.form["state"]
if self.source_application.form["state"] == "NY":
policy_num = get_next_value(sequence_name, initial_value=200_000)
elif self.source_application.form["state"] == "IA":
policy_num = get_next_value(sequence_name, initial_value=400_000)
else:
sequence_name = self.product.product_id
policy_num = get_next_value(sequence_name, initial_value=300_000)
policy_id = self.product.product_id + "-" + str(policy_num)
return policy_id
Это прекрасно работает.Однако я бы хотел, чтобы в модели не было кода для конкретного продукта.Я мог бы сделать это почти полностью на языке шаблонов Django, но требования к идентификатору продукта, они последовательно меняются в зависимости от состояния.Итак, get_next_value рисует из постоянной последовательности в базе данных.Таким образом, я хотел бы переместить условную логику в файл JSON.
Однако, вызываемые элементы не принимают параметров.И мне нужно передать начало последовательности и состояние в качестве параметров для генерации идентификатора.Поскольку теги могут принимать параметры, я решил использовать простые теги, которые могут принимать параметры.Наряду с условными шаблонными языками.Я думал, что у меня должна быть строка шаблона:
{
"id_template": "{{ product.product_id }}-{% if product.source_application.form.state == \"NY\" %}{{ product.get_next_product_id "NY" 200000 }}{% elif product.source_application.form.state == \"IA\" %}{{ product.get_next_product_id "IA" 400000 }}{% else %}{{ product.get_next_product_id "other" 300000 }}{% endif %}"
}
Затем в модели я бы поместил следующий код:
@register.simple_tag(name="get_next_product_id")
def get_next_product_id(self, state, initial_value):
sequence_name = self.product.product_id + "-" + self.source_application.form["state"]
return get_next_value(sequence_name, initial_value=initial_value)
К сожалению, я получаюошибка из этого:
E django.template.exceptions.TemplateSyntaxError: Could not parse the remainder: ' "NY" 200000' from 'get_next_product_id "NY" 200000'
Я думал, что простые теги могут иметь аргументы.Это ошибочно?
Поскольку строка шаблона не анализируется, я упростил строку до следующего:
{
"id_template": "{{ product.get_next_product_id "NY" 200000 }}"
}
Но ошибка остается той же.Удаление кавычек вокруг "NY" не имеет никакого эффекта.
Вопрос:
Возможно ли то, что я пытаюсь сделать, используя теги шаблонов Django?И, если нет, есть ли другой способ вывести логику для конкретного продукта из модели?