import requests from django.http import HttpResponseRedirect from django.utils.html import format_html from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME from adminpanelapp.settings import g_telegram_bot_api_token from .models import Orders from django.contrib import admin, messages from django.urls import reverse class OrdersAdmin(admin.ModelAdmin): list_display = ('name', 'description', 'time_create', 'adress', 'is_approved', 'orders_photo', 'cheque_image') list_editable = ('is_approved',) # exclude = ('param_id', 'send_message') actions =['change_value_and_redirect',] readonly_fields = ['order_photo', 'cheque'] def orders_photo(self, obj): if obj.order_photo and obj.order_photo.url: return format_html('', obj.order_photo.url) return "-" def cheque_image(self, obj): if obj.cheque and obj.cheque.url: return format_html('', obj.cheque.url) return "-" # image_tag.short_description = 'Cheque' # def photo_link(self, obj): # url = obj.get_absolute_url() # return format_html('{}', url, obj.photo_link) # # photo_link.short_description = 'photo_link' # def change_view(self, request, object_id, form_url='', extra_context=None): # obj = self.get_object(request, object_id) # extra_context = extra_context or {} # extra_context['chat_id'] = obj.param_id # # if obj.send_message: # obj.send_message = False # obj.save() # url = reverse('send_telegram_message') # chat_id = obj.param_id # url = f"{url}?param_id={chat_id}" # print(chat_id) # return HttpResponseRedirect(url) # # # return super().change_view(request, object_id, form_url, extra_context) # def change_view(self, request, object_id, form_url='', extra_context=None): # obj = self.get_object(request, object_id) # if obj.send_message: # url = reverse('send_telegram_message') # # return HttpResponseRedirect(url) # # return super().change_view(request, object_id, form_url, extra_context) # def change_value_and_redirect(modeladmin, request, queryset): # # # Получаем список выбранных объектов # selected_objects = request.POST.getlist(ACTION_CHECKBOX_NAME) # # Проверяем, что выбран только один объект # if len(selected_objects) != 1: # # Если выбрано несколько объектов или не выбран ни один, выбрасываем исключение или выводим сообщение пользователю # raise ValueError("Выберите только один объект") # # Получаем ID выбранного объекта # selected_object_id = int(selected_objects[0]) # # Получаем объект по ID # obj = queryset.get(id=selected_object_id) # # Изменяем значение ячейки объекта на False # obj.send_message = True # obj.save() # # Редирект на страницу send_tg_message # url = reverse('send_telegram_message') # return HttpResponseRedirect(url) def change_value_and_redirect(modeladmin, request, queryset): selected_objects = request.POST.getlist(ACTION_CHECKBOX_NAME) if len(selected_objects) != 1: messages.error(request, "Выберите только один объект") return selected_chat_id = int(selected_objects[0]) obj = queryset.get(id=selected_chat_id) chat_id = obj.param_id url = reverse('send_telegram_message', kwargs={'chat_id': chat_id}) return HttpResponseRedirect(url) change_value_and_redirect.short_description = 'Отправка сообщения' def save_model(self, request, obj, form, change): super().save_model(request, obj, form, change) def send_telegram_message(message): bot_token = g_telegram_bot_api_token chat_id = obj.param_id url = f"https://api.telegram.org/bot{bot_token}/sendMessage" params = { 'chat_id': chat_id, 'text': message } response = requests.get(url, params=params) if response.status_code == 200: print("Сообщение успешно отправлено!") else: print("Ошибка при отправке сообщения") if obj.is_approved == True: message2 = 'Ваш заказ принят. Ожидайте получения' send_telegram_message(message2) admin.site.register(Orders, OrdersAdmin,)