получить список элементов чекбокса из таблицы в django без использования django-форм - PullRequest
5 голосов
/ 16 июня 2019

здесь у меня есть таблица и есть флажок, и я хочу отправить электронное письмо на все проверенные данные этой таблицы.Для этого я попробовал следующее.Но это не работает .Проблема при возврате списка проверенных пунктов.Элементы, которые проверены, не возвращаются.Как это решить?

шаблон

<tbody>
    {% for contact in contacts %}
        <tr>
        <td>
        <input name ="messages" type="checkbox" 
         id="contact-{{contact.id}}" value={{contact.id}}"> 

          <label for="contact-{{contact.id}}">{{ forloop.counter }}</label>
        </td>
        <td>{{ contact.name }}</td>
      <td>{{ contact.email }}</td>
        <td>{{ contact.subject }}</td>                          
        <td>{{ contact.message }}</td>
    </tr>
        {% endfor %}
        </tbody>
        //modal 
        <button class="btn btn-primary send-mail-to-selected-btn" type="button"
 data-toggle="modal" data-target="#item-unit-modal1">
Send Mail To Selected Email
</button>
        <div class="modal" id="item-unit-modal1">
            <div class="modal-body">
       <form method="POST" action="{% url 'admin:send_mail_selected_contact' %}" class="unit-ajax-form">
    {% csrf_token %}
    <p><label>Subject</label> <input type="text" name="subject" class="form-control required" placeholder="Enter subject" ></p>
     <p><label>Message</label> <textarea  name="message" class="form-control required" placeholder="Enter message" ></textarea></p>
     <button class="btn btn-primary mt-30">Send Mail</button>
      </form>
       </div>

views.py

def send_mail_selected_contact(request):
    selected_contact = ContactForm.objects.filter(id__in=request.POST.getlist('messages'))
    print(selected_contact)
    form = SendMailContact(request.POST or None)
    if form.is_valid():
        subject = form.cleaned_data['subject']
        message = form.cleaned_data['message']
        for contact in selected_contact:
            send_mail(subject, message, ' <settings.EMAIL_HOST_USER>', [contact.email])
        messages.success(request, 'Mail Sent')
        return redirect('admin:contact_message')

ajax

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script>
$(document).on('click', '.send-mail-to-selected-btn', function(){
  var messages = new Array();
$("input:checked").each(function() {
    messages.push($(this).val());
});

console.log(messages); #here i can see the id of checked email
});

$.ajax({
    url:'admin/selected/send/mail/contact/',
    data:{
        name: name,
        messages: messages,
    }
});
</script>

forms.py

class SendMailContact(forms.Form):
    subject = forms.CharField(max_length=250)
    message = forms.CharField(widget=forms.Textarea)

1 Ответ

3 голосов
/ 24 июня 2019

Вам необходимо переместить ваш ajax вызов в обработчик кликов.

Кроме того, поскольку вы прослушиваете щелчок, а не отправку события, вы не можете запретить браузеру также отправлять это сообщение.форма.Ниже приведена обновленная реализация, которая прослушивает отправку, отменяет поведение браузера по умолчанию и выполняет вызов AJAX при отправке.

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script>
$(document).on('submit', '.send-mail-to-selected-btn', function(ev){
ev.preventDefault()
  var messages = new Array();
$("input:checked").each(function() {
    messages.push($(this).val());
});

console.log(messages); #here i can see the id of checked email
$.ajax({
    url:'admin/selected/send/mail/contact/',
    data:{
        name: name,
        messages: messages,
    }
});
});
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...