Ура! решение нашел.
views.py
@login_required
def create_order(request):
cart = Cart(request)
user = request.user
if request.method == 'POST':
form = OrderForm(request.POST)
if form.is_valid():
order = form.save(commit=False)
order.user = user # Установка текущего пользователя как создателя заказа
order.save()
order_id = None
for item in cart:
plant = item['product']
quantity = item['quantity']
price = item['price']
order_item = OrderItem.objects.create(order=order, plant=plant, price=price, quantity=quantity) # get order using foreignkey
order_id = order_item.order.id
sendMessageTg(order) # Отправить сообщение после создания всех товаров в заказе
cart.clear() # Очистка корзины
return render(request, 'main/order_successful_created.html', {'order_id': order_id}) # Перенаправление на страницу подтверждения заказа
else:
initial_data = {'first_name': user.first_name, 'last_name': user.last_name, 'email': user.email}
form = OrderForm(initial=initial_data, instance=Order(user=user)) # Передача начальных данных и экземпляра модели Order в форму
return render(request, 'main/create_order.html', {'form': form, 'cart': cart})
bot.py
import requests
from main.models import OrderItem
from .models import *
from datetime import datetime
from datetime import datetime
def sendMessageTg(order_item):
if TelegramOrderMessage.objects.get(pk=1):
tg_data = TelegramOrderMessage.objects.get(pk=1)
token = str(tg_data.bot_token)
chat_id = str(tg_data.chat_id)
text = str(tg_data.message)
order = order_item # Получение объекта заказа
order_items = OrderItem.objects.filter(order=order) # Получение всех OrderItem для текущего заказа
order_items_text = "" # Переменная для хранения текста всех OrderItem
# Формирование текста для каждого OrderItem
for item in order_items:
item_data = {
'plant': item.plant.plant_name,
'price': item.price,
'quantity': item.quantity,
'time_created': item.time_created.strftime('%Y-%m-%d %H:%M') # Форматирование времени создания
}
item_text = "" # Переменная для хранения текста одного OrderItem
# Формирование текста одного OrderItem
for field_name, field_value in item_data.items():
item_text += f"{field_name}: {field_value}\n"
order_items_text += item_text + "\n" # Добавление текста одного OrderItem к общему тексту всех OrderItem
# Формирование сообщения с использованием всех полей модели Order
for field in order._meta.fields:
field_name = field.name
field_value = getattr(order, field_name)
if field_value:
if isinstance(field_value, datetime):
field_value = field_value.strftime('%Y-%m-%d %H:%M') # Форматирование времени
text = text.replace(f'{{{{ {field_name} }}}}', str(field_value))
# Добавление текста всех OrderItem к сообщению
text = text.replace("{{ order_items }}", order_items_text)
url_req = f"https://api.telegram.org/{token}/sendMessage?chat_id={chat_id}&text={text}"
results = requests.get(url_req)
print(results.json())
в админке
{{ order_items }}
т.е вынес функцию sendMessageTg и в bot,py обратился к элементам таким способом
order = order_item # Получение объекта заказа