Выполнение функции при нажатии на кнопку в админке Django

Есть задача на странице модели реализовать кнопку для отправки SMS. Для этого у меня есть функция которая это делает в Actions. Нужно чтоб кнопка отображалась в fields для каждой модели и работала.

admin.py

def send_sms(modeladmin, request, queryset):
   login = 'Login'  #string User ID (phone number)
   password = 'pass'  #string Password
   alphaName = 'Name'    #string, sender id (alpha-name) (as long as your alpha-name is not spelled out, it is necessary to use it)
   token_id = queryset.values('token_id')[0]['token_id']
   vykl_name = Vykladka.objects.filter(id=token_id).values("name")[0]['name']
   abonent = queryset.values('number')[0]['number']
   comment = queryset.values('comment')[0]['comment']
   status_code = queryset.values('status')[0]['status']
   status = Status.objects.filter(id=status_code).values("status")[0]['status']
   abonent_name_code = queryset.values('name_worker')[0]['name_worker']
   abonent_name = mainmodel.Worker.objects.filter(id=abonent_name_code).values("name")[0]['name']
   text = "Привіт "+str(abonent_name)+"! Стутус вашої викладки, "+vykl_name+": "+str(status)+". Коментарій до неї "+str(comment)
           
   xml = "<?xml version='1.0' encoding='utf-8'?><request_sendsms><username><![CDATA["+login+"]]></username><password><![CDATA["+password+"]]></password><from><![CDATA["+alphaName+"]]></from><to><![CDATA["+abonent+"]]></to><text><![CDATA["+text+"]]></text></request_sendsms>"
   requests.post('https://gate.smsclub.mobi/xml/', data=xml.encode('utf-8')) # post-запрос з xml-данными

send_sms.short_description = "Відправити SMS"

class RequestAdmin(admin.ModelAdmin):
   list_display = ('token','pid','status','image_tag','name_worker','created','number')
   list_display_links = ('token','pid')
   search_fields = ('name','pid')
   list_filter =('status','token','created')
   readonly_fields = ['image_tag','created']
   fields = ['token','status','comment','name_worker','image_tag','created']
   actions = [send_sms]

models.py

class Request(models.Model):
    name =  models.TextField(max_length=200, verbose_name="Назва",null=True,blank=True)
    img = models.ImageField(upload_to='img/', verbose_name="Картинка")
    token = models.ForeignKey(Vykladka, verbose_name='Назва викладки' ,on_delete=models.CASCADE,max_length=20,null=True, blank=True)

    def image_tag(self):
        return mark_safe("<img src='%s' style ='max-width: 350px; max-height: 520px;' />" % (
            self.img.url))  # Get img url

    image_tag.short_description = 'Картинка'
    pid =  models.CharField(max_length=10, verbose_name="Номер аптеки",null=True, blank=True)
    comment = models.TextField(max_length=500, verbose_name="Коментарій",default='', blank=True)
    name_worker = models.ForeignKey(mainm.Worker,max_length=50, verbose_name="Відповідальна особа",default='', on_delete=models.CASCADE)
    status = models.ForeignKey(Status, verbose_name="Статус первіврки",on_delete=models.CASCADE,null=True, blank=True,default='2')
    number =  models.CharField(max_length=100, verbose_name="Номер телефону",null=True, blank=True)
    created = models.DateTimeField(auto_now_add=True,verbose_name="Дата додавання") 

    def __str__(self):
        return self.pid

Буду очень благодарен за помощь, в гугле, документации и на Stack-е не получилось найти решение.

Вернуться на верх