fix(discounts): исправить предзаполнение полей формы скидки при редактировании

- Обновлена логика отображения значений полей в шаблоне discount_form.html
- Теперь корректно обрабатываются значения как для новых, так и для существующих записей
- Устранены проблемы с отображением значений по умолчанию и выбранных опций
- Добавлена проверка на наличие instance.pk для определения режима редактирования
This commit is contained in:
2026-01-20 00:54:38 +03:00
parent 4b384ef359
commit 0b5db0c2e6

View File

@@ -33,13 +33,13 @@
<div class="col-md-6"> <div class="col-md-6">
<label for="id_name" class="form-label">Название * <span class="text-muted small">(макс. 200 символов)</span></label> <label for="id_name" class="form-label">Название * <span class="text-muted small">(макс. 200 символов)</span></label>
<input type="text" class="form-control" id="id_name" name="name" <input type="text" class="form-control" id="id_name" name="name"
value="{% if form.name.value %}{{ form.name.value }}{% endif %}" value="{% if form.instance.pk %}{{ form.instance.name|default_if_none:'' }}{% else %}{{ form.name.value|default_if_none:'' }}{% endif %}"
maxlength="200" required> maxlength="200" required>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<label for="id_priority" class="form-label">Приоритет</label> <label for="id_priority" class="form-label">Приоритет</label>
<input type="number" class="form-control" id="id_priority" name="priority" <input type="number" class="form-control" id="id_priority" name="priority"
value="{% if form.priority.value %}{{ form.priority.value }}{% else %}0{% endif %}" value="{% if form.instance.pk %}{{ form.instance.priority|default_if_none:0 }}{% else %}{{ form.priority.value|default_if_none:0 }}{% endif %}"
min="0"> min="0">
<div class="form-text">Выше = применяется раньше</div> <div class="form-text">Выше = применяется раньше</div>
</div> </div>
@@ -47,7 +47,7 @@
<div class="mb-3"> <div class="mb-3">
<label for="id_description" class="form-label">Описание</label> <label for="id_description" class="form-label">Описание</label>
<textarea class="form-control" id="id_description" name="description" rows="2">{{ form.description.value }}</textarea> <textarea class="form-control" id="id_description" name="description" rows="2">{% if form.instance.pk %}{{ form.instance.description|default_if_none:'' }}{% else %}{{ form.description.value|default_if_none:'' }}{% endif %}</textarea>
</div> </div>
<!-- Параметры скидки --> <!-- Параметры скидки -->
@@ -57,23 +57,28 @@
<label for="id_discount_type" class="form-label">Тип скидки *</label> <label for="id_discount_type" class="form-label">Тип скидки *</label>
<select class="form-select" id="id_discount_type" name="discount_type" required> <select class="form-select" id="id_discount_type" name="discount_type" required>
<option value="">Выберите...</option> <option value="">Выберите...</option>
<option value="percentage" {% if form.discount_type.value == 'percentage' %}selected{% endif %}>Процент</option> <option value="percentage"
<option value="fixed_amount" {% if form.discount_type.value == 'fixed_amount' %}selected{% endif %}>Фиксированная сумма (руб.)</option> {% if form.instance.pk and form.instance.discount_type == 'percentage' or form.discount_type.value == 'percentage' %}selected{% endif %}>Процент</option>
<option value="fixed_amount"
{% if form.instance.pk and form.instance.discount_type == 'fixed_amount' or form.discount_type.value == 'fixed_amount' %}selected{% endif %}>Фиксированная сумма (руб.)</option>
</select> </select>
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<label for="id_value" class="form-label">Значение *</label> <label for="id_value" class="form-label">Значение *</label>
<input type="number" class="form-control" id="id_value" name="value" <input type="number" class="form-control" id="id_value" name="value"
value="{{ form.value.value|default:'' }}" value="{% if form.instance.pk %}{{ form.instance.value|default_if_none:'' }}{% else %}{{ form.value.value|default_if_none:'' }}{% endif %}"
step="0.01" min="0" required> step="0.01" min="0" required>
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<label for="id_scope" class="form-label">Область действия *</label> <label for="id_scope" class="form-label">Область действия *</label>
<select class="form-select" id="id_scope" name="scope" required> <select class="form-select" id="id_scope" name="scope" required>
<option value="">Выберите...</option> <option value="">Выберите...</option>
<option value="order" {% if form.scope.value == 'order' %}selected{% endif %}>На весь заказ</option> <option value="order"
<option value="product" {% if form.scope.value == 'product' %}selected{% endif %}>На конкретные товары</option> {% if form.instance.pk and form.instance.scope == 'order' or form.scope.value == 'order' %}selected{% endif %}>На весь заказ</option>
<option value="category" {% if form.scope.value == 'category' %}selected{% endif %}>На категории товаров</option> <option value="product"
{% if form.instance.pk and form.instance.scope == 'product' or form.scope.value == 'product' %}selected{% endif %}>На конкретные товары</option>
<option value="category"
{% if form.instance.pk and form.instance.scope == 'category' or form.scope.value == 'category' %}selected{% endif %}>На категории товаров</option>
</select> </select>
</div> </div>
</div> </div>
@@ -82,7 +87,7 @@
<div class="col-md-6"> <div class="col-md-6">
<div class="form-check form-switch mt-4"> <div class="form-check form-switch mt-4">
<input class="form-check-input" type="checkbox" id="id_is_auto" name="is_auto" <input class="form-check-input" type="checkbox" id="id_is_auto" name="is_auto"
{% if form.is_auto.value %}checked{% endif %}> {% if form.instance.pk and form.instance.is_auto or form.is_auto.value %}checked{% endif %}>
<label class="form-check-label" for="id_is_auto"> <label class="form-check-label" for="id_is_auto">
Автоматическое применение Автоматическое применение
</label> </label>
@@ -92,7 +97,7 @@
<div class="col-md-6"> <div class="col-md-6">
<div class="form-check form-switch mt-4"> <div class="form-check form-switch mt-4">
<input class="form-check-input" type="checkbox" id="id_is_active" name="is_active" <input class="form-check-input" type="checkbox" id="id_is_active" name="is_active"
{% if form.is_active.value is None or form.is_active.value %}checked{% endif %}> {% if form.instance.pk and form.instance.is_active != False or form.is_active.value != False %}checked{% endif %}>
<label class="form-check-label" for="id_is_active"> <label class="form-check-label" for="id_is_active">
Активна Активна
</label> </label>
@@ -104,13 +109,16 @@
<div class="mb-3"> <div class="mb-3">
<label for="id_combine_mode" class="form-label">Режим объединения с другими скидками</label> <label for="id_combine_mode" class="form-label">Режим объединения с другими скидками</label>
<select class="form-select" id="id_combine_mode" name="combine_mode"> <select class="form-select" id="id_combine_mode" name="combine_mode">
<option value="max_only" {% if form.combine_mode.value == 'max_only' or not form.combine_mode.value %}selected{% endif %}> <option value="max_only"
{% if form.instance.pk and form.instance.combine_mode == 'max_only' or not form.instance.pk and form.combine_mode.value == 'max_only' or not form.combine_mode.value %}selected{% endif %}>
🏆 Только максимум (применяется лучшая скидка) 🏆 Только максимум (применяется лучшая скидка)
</option> </option>
<option value="stack" {% if form.combine_mode.value == 'stack' %}selected{% endif %}> <option value="stack"
{% if form.instance.pk and form.instance.combine_mode == 'stack' or not form.instance.pk and form.combine_mode.value == 'stack' %}selected{% endif %}>
📚 Складывать (суммировать с другими) 📚 Складывать (суммировать с другими)
</option> </option>
<option value="exclusive" {% if form.combine_mode.value == 'exclusive' %}selected{% endif %}> <option value="exclusive"
{% if form.instance.pk and form.instance.combine_mode == 'exclusive' or not form.instance.pk and form.combine_mode.value == 'exclusive' %}selected{% endif %}>
🚫 Исключающая (отменяет остальные скидки) 🚫 Исключающая (отменяет остальные скидки)
</option> </option>
</select> </select>
@@ -123,14 +131,14 @@
<div class="col-md-6"> <div class="col-md-6">
<label for="id_min_order_amount" class="form-label">Мин. сумма заказа</label> <label for="id_min_order_amount" class="form-label">Мин. сумма заказа</label>
<input type="number" class="form-control" id="id_min_order_amount" name="min_order_amount" <input type="number" class="form-control" id="id_min_order_amount" name="min_order_amount"
value="{{ form.min_order_amount.value|default:'' }}" value="{% if form.instance.pk %}{{ form.instance.min_order_amount|default_if_none:'' }}{% else %}{{ form.min_order_amount.value|default_if_none:'' }}{% endif %}"
step="0.01" min="0"> step="0.01" min="0">
<div class="form-text">Для скидок на заказ</div> <div class="form-text">Для скидок на заказ</div>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<label for="id_max_usage_count" class="form-label">Макс. использований</label> <label for="id_max_usage_count" class="form-label">Макс. использований</label>
<input type="number" class="form-control" id="id_max_usage_count" name="max_usage_count" <input type="number" class="form-control" id="id_max_usage_count" name="max_usage_count"
value="{{ form.max_usage_count.value|default:'' }}" value="{% if form.instance.pk %}{{ form.instance.max_usage_count|default_if_none:'' }}{% else %}{{ form.max_usage_count.value|default_if_none:'' }}{% endif %}"
min="1"> min="1">
<div class="form-text">Оставьте пустым для безлимитного использования</div> <div class="form-text">Оставьте пустым для безлимитного использования</div>
</div> </div>
@@ -140,12 +148,12 @@
<div class="col-md-6"> <div class="col-md-6">
<label for="id_start_date" class="form-label">Дата начала</label> <label for="id_start_date" class="form-label">Дата начала</label>
<input type="datetime-local" class="form-control" id="id_start_date" name="start_date" <input type="datetime-local" class="form-control" id="id_start_date" name="start_date"
value="{% if form.start_date.value %}{{ form.start_date.value|date:'Y-m-d\TH:i' }}{% endif %}"> value="{% if form.instance.pk and form.instance.start_date %}{{ form.instance.start_date|date:'Y-m-d\TH:i' }}{% elif form.start_date.value %}{{ form.start_date.value|date:'Y-m-d\TH:i' }}{% endif %}">
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<label for="id_end_date" class="form-label">Дата окончания</label> <label for="id_end_date" class="form-label">Дата окончания</label>
<input type="datetime-local" class="form-control" id="id_end_date" name="end_date" <input type="datetime-local" class="form-control" id="id_end_date" name="end_date"
value="{% if form.end_date.value %}{{ form.end_date.value|date:'Y-m-d\TH:i' }}{% endif %}"> value="{% if form.instance.pk and form.instance.end_date %}{{ form.instance.end_date|date:'Y-m-d\TH:i' }}{% elif form.end_date.value %}{{ form.end_date.value|date:'Y-m-d\TH:i' }}{% endif %}">
</div> </div>
</div> </div>
@@ -174,7 +182,6 @@
{% if not all_categories %} {% if not all_categories %}
<option value="" disabled>Нет доступных категорий</option> <option value="" disabled>Нет доступных категорий</option>
{% endif %} {% endif %}
%}
</select> </select>
<div class="form-text">Удерживайте Ctrl для выбора нескольких категорий</div> <div class="form-text">Удерживайте Ctrl для выбора нескольких категорий</div>
</div> </div>