Как добавить/перенести список значений из одной модели в другую в django?
Позвольте мне показать вам, что я сделал успешно и чего я пытаюсь достичь сейчас.
У меня есть 2 модели. Обе имеют одинаковые 3 поля. Имя, Месяц, Номер. Две модели - Main и BMO.
Я фильтрую первую модель на основе имени и месяца и получаю список значений столбца number. Код выглядит следующим образом-
result= Main.objects.filter(name="John", month='apr').values_list('number', flat=True)
Затем я отображаю это на шаблоне django с помощью цикла for и условных условий. Код выглядит следующим образом -
<p>result:
<span>
{% for i in result %}
{{i}}{% if not forloop.last %}+{% endif %}
{% endfor %}
</span>
</p>
result = 2+4+12+7+18
Последняя строка показывает, как это выглядит на самом деле в шаблоне. Вы можете видеть, что я отображаю его со знаками + между значениями.
Чего я хочу достичь:
Я хочу получить тот же список значений, но вместо того, чтобы показывать его в шаблоне, я хочу вставить его в поле другой модели. Чтобы было понятно, я хочу, чтобы все значения с включенным знаком плюс (так, как это выглядит в моем шаблоне) были вставлены в одно поле второй модели BMO. Если у меня есть 10 значений, все они должны быть объединены знаком плюс и добавлены в одно поле, а не распределены по 10 строкам столбца.
ВОТ ЧТО Я ПОПРОБОВАЛ:
Я отфильтровал вторую модель BMO на основе имени и месяца и попробовал обновить число с помощью метода .update(). Я добавил следующую строку кода в views.py прямо под первой строкой кода. Я не использую шаблон вообще.
result= Main.objects.filter(name="John", month='apr').values_list('number', flat=True)
Bmo.objects.filter(name="test", month='apr).update(number = result)
Это ничего не изменило и не добавило. Поэтому я попробовал новую строку кода с циклом for следующим образом -
result= Main.objects.filter(name="John", month='apr').values_list('number', flat=True)
for i in result:
Bmo.objects.filter(name__icontains = 'test').update(number = i)
Это также ничего не изменило. Есть только 1 строка с именем 'test', поэтому я не стал заморачиваться с фильтром по месяцам. Я не был полностью уверен в цикле for, но я уже успешно обновлял категории с совпадением имен с помощью этого кода, поэтому подумал, что это может сработать. Разница в том, что категория была одной строкой, например category='personal', а не переменной или несколькими переменными, как в данном случае.
Я думаю, что я очень близок к достижению того, что я хочу, в пределах строки или двух кодов. Если есть более простой способ сделать то, что я пытаюсь сделать, я весь внимание. Спасибо за любой вклад.
Вы можете сделать это следующим образом:
result = Main.objects.filter(
name="John", month='apr'
).values_list('number', flat=True)
number = str()
count = len(result)
for index, r in enumerate(result):
number += str(r) + '+' if count != index + 1 else str(r)
Bmo.objects.filter(name="test", month='apr').update(number = number)