Как добавить кнопку в список django для добавления данных списка в текстовое поле HTML?

Я ищу наилучшую реализацию добавления данных в представление из модели Django в список, отображаемый в шаблоне с помощью кнопки, которая располагается вместе с другими данными в каждой строке.

Если быть точным, я хочу, чтобы номер телефона человека был выбран и инициирован для просмотра при отправке формы, которая затем отправляет SMS на эти номера через API.

models.py

class Patient(models.Model):
patient_serial = models.IntegerField(null=True, blank=True)
customer = models.CharField(max_length=100)
phone_regex = RegexValidator(
    regex=r'^\+?1?\d{9,10}$', message="Phone number must be entered in the format: '98xxxxxxxx'. Up to 10 digits allowed.")
customer_phone = models.CharField(
    validators=[phone_regex], max_length=10, blank=True)
GENDER_CHOICES = (
    ('O', 'Others'),
    ('M', 'Male'),
    ('F', 'Female'),
)
gender = models.CharField(
    max_length=10, choices=GENDER_CHOICES, default='None')
date_of_birth = models.DateField()
age = models.IntegerField(null=True, blank=True)
billing_address = models.CharField(max_length=100, null=True, blank=True)
date = models.DateField()blank=True)
issue_detail = models.TextField(
    max_length=250, null=True, default="", blank=True)
treatment_plan = models.ForeignKey(
    TreatmentPlan, on_delete=models.CASCADE, null=True, blank=True)
total_amount = models.ForeignKey(
    Invoice, on_delete=models.CASCADE, blank=True, null=True)
status = models.BooleanField(default=False)

def __str__(self):
    return str(self.customer)

def get_status(self):
    return self.status

def get_absolute_url(self):
    return reverse('patients')

def num(self):
    return self.customer_phone

class Sms(models.Model):
    recipients = models.ForeignKey(Patient, on_delete=models.CASCADE)
    text_message = models.TextField(
        max_length=160, null=True, default="", blank=True)

views.py

def composeSMS(request):

text = request.POST.get('smsArea', False)
recipients = request.POST.get('contacts', False)

sms = requests.post(
    "<api-endpoint>",
    data={'token': '<api-key>',
          'from': 'Company',
          'to': recipients,
          'text': text})

sms_status_code = sms.status_code
sms_response = sms.text
sms_response_json = sms.json()

context = {
    'sms': sms
}

return render(request, "sms_sent.html", context)

urls.py

from django.urls import path, re_path
 from app import views
 from .views import *

urlpatterns = [
    path('send-sms/', composeSMS, name='send-sms'),
    ]

sms_main.html

<form class="" method="POST" action="{% url 'send-sms' %}" onSubmit="window.location.reload()">
{% csrf_token %}
<div class="field">
  <label class="label">Compose SMS</label>
  <div class="control">
      <textarea class="textarea is-primary is-normal" maxlength=160 name="smsArea" cols=80 rows=10 style="resize:none" placeholder="Your SMS goes here..."></textarea>
  </div><br>
  <textarea class="textarea is-normal has-fixed-size" name="contacts" cols=92 rows=1 placeholder="Selected recipents' contact numbers will be added here...">NUMBERS TO BE ADDED HERE WITH COMMA</textarea>
  <br/>
  <a onclick="hideFn()"><label class="label">Select Recipients <i id="iconLa" class="material-icons">expand_more</i></label></a>
  <div style="display:none" id="theTable">
    <table class="table is-fullwidth is-bordered is-hoverable is-striped">
      <tbody>
        <thead>
          <tr>
            <th></th>
            <th>#</th>
            <th>NAME</th>
            <th>NUMBER</th>
          </tr>
        </thead>
        {% for contact in contacts %}
        <tr>
          <td width="1%">BUTTON HERE</td>
          <td width="1%">{{contact.id}}</td>
          <td width="20%">{{contact.customer}}</td>
          <td width="20%">{{contact.num}}</td>
        </tr>
        {% endfor %}
      </tbody>
    </table>
  </div>

</div>
<input class="btn btn-info" style="background:#5498C2;border:none;" type="submit" value="SEND"/>

Также есть ли какая-нибудь реализация с помощью JS? Я буду благодарен за помощь. Спасибо.

Самое простое решение - установить динамический id, например contact.id, для каждой строки и получать информацию о родителе при нажатии на кнопку. Аналогичный подход можно найти здесь: https://www.geeksforgeeks.org/how-to-send-row-data-when-clicking-button-using-javascript/amp/

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