Язык шаблона Django, если тег не работает
У меня есть шаблон django с формой обновления, для приложения счетов.
Я хочу позволить обновлять запись после того, как она была сохранена.
Одно из полей модели - manager, которое является внешним ключом:
class Invoice(models.Model):
manager = models.ForeignKey(User, on_delete=models.CASCADE,null=True ,blank=True)
Проблема в том, что мне нужно отображать не id пользователя менеджера, а его/ее имя, поэтому я хочу заполнить тег select именами всех менеджеров. Я пробовал следующее:
<select id="id_manager" name="manager">
{% for manager in managers %}
{{ manager }} || {{ initial_manager }}
{% if manager == initial_manager %}
<option value="{{ manager.user.id }}" selected>{{ manager.user.first_name }}</option>
{% else %}
<option value="{{ manager.user.id }}">{{ manager.user.first_name }}</option>
{% endif %}
{% endfor %}
</select>
Это часть views.py:
managers = Profile.objects.filter(Q(role = 'manager') | Q(role = 'cfo') | Q(role = 'ceo') | Q(role = 'sec'))
projects = Project.objects.all()
form = InvoiceForm(instance = invoice)
initial_manager = invoice.manager
return render(request, "invoice/update.html", {'form': form, 'managers':managers, 'projects':projects, 'initial_manager':initial_manager})
Я добавил это, чтобы увидеть значения переменных:
{{ manager }} || {{ initial_manager }}
и я вижу, например, " 102 || 102 ", что означает, что они равны, но часть if не выполняется, она всегда переходит к части else. Неважно, что я пробовал, я пробовал передавать initial_manager как строку, сравнивать manager с " 102 " или с "102" или с 102, но ничего не работает.
.
Кто-нибудь может мне помочь?
если оба значения одинаковы, но возвращается false при использовании if тогда попробуйте модифицировать код, чтобы сделать их оба плавающими, используя floatformat для вашего случая
{% if manager|floatformat:"0" == initial_manager|floatformat:"0" %}
<option value="{{ manager.user.id }}" selected>{{ manager.user.first_name }}</option>
{% else %}
<option value="{{ manager.user.id }}">{{ manager.user.first_name }}</option>
{% endif %}
это сделает их оба float с 0 после запятой, так что это похоже на преобразование их в целое число. смотрите также
Спасибо за помощь. Я использовал stringformat вместо floatformat.
<select id="id_manager" name="manager">
{% for manager in managers %}
{{ manager }} || {{ initial_manager }}
{% if manager|stringformat:'s' == initial_manager|stringformat:'s' %}
<option value="{{ manager.user.id }}" selected>{{ manager.user.first_name }}</option>
{% else %}
<option value="{{ manager.user.id }}">{{ manager.user.first_name }}</option>
{% endif %}
{% endfor %}
</select>
Теперь это работает. Я ценю вашу помощь