Как добавить кнопку в список 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/