Как отправить проверенные строки таблицы в шаблоне для просмотра и создания нескольких строк данных в django дБ? - PullRequest
0 голосов
/ 24 января 2020

В основном у меня есть три таблицы в моих моделях:
1) Делегаты - хранение всех делегатов
2) События - хранение всех событий
3) EventDelegate - отношение между делегатом и событием (для которого зарегистрирован делегат). какое событие)

Таблица делегатов отображается в шаблоне каждого события, которое также содержит событие, и я поставил флажок рядом с каждой строкой, чтобы сохранить проверенную строку и отправить идентификаторы всех проверенных строк в представление. функция, так что я могу вставить идентификаторы делегатов с l oop в таблицу EventDelegate вместе с тем же Eventid (он останется одинаковым для каждой строки, потому что я отправляю данные с каждой страницы события).
Итак, наконец, я должен быть в состоянии проверить делегатов из списка всех для каждой страницы события, и, нажав на кнопку отправить, добавит их идентификаторы вместе с идентификатором события в таблицу EventDelegate. Я что-то сделал, но не работаю так, как должен, разделяя мою работу до сих пор: -

models.py

...
class EventDelegate(models.Model):
    event = models.ForeignKey(Event, on_delete=models.DO_NOTHING)
    delegate = models.ForeignKey(Delegate, on_delete=models.DO_NOTHING)

шаблон. html

<form action="/register-delegates" method="POST">
                        {% csrf_token %}
                        <table id="myTable2" class="table table-striped table-bordered" style="width:100%">
                            <thead class="thead-light">
                            <tr>
                                <th scope="col"></th>
                                <th scope="col">#</th>
                                <th scope="col">Name</th>
                                <th scope="col">Email</th>
                                <th scope="col">Phone</th>
                                <th scope="col">Company</th>
                                <th scope="col">Designation</th>
                                <th></th>
                            </tr>
                            </thead>
                            <tbody>
                            {% for del in delegates %}
                            <tr>
//CHECKBOX TO SELECT MULTIPLE DELEGATES <td><input type="checkbox" name="regdelegate" value="{{ del.id }}"></td>
                                <td>{{ del.id }}</td>
                                <td>{{ del.first_name }} {{ del.last_name }}</td>
                                <td>{{ del.email }}</td>
                                <td>{{ del.phone }}</td>
                                <td>{{ del.company }}</td>
                                <td>{{ del.designation }}</td>
                                <td><a href="{% url 'delegate' dataset_id=del.dataset_id %}">View</a></td>
                            </tr>
                            {% endfor %}
//STORING THE EVENT ID HERE FOR POSTING  <input type="hidden" name="eventid" value="{{ ev.id }}" />
                            <input type="submit" name="register" value="Register Selected Delegates" />
                            </tbody>
                        </table>
                    </form>

views.py

def register_delegates(request):
    if request.method=='POST':
        eventid = request.POST.get('eventid')
        tosave = request.POST.getlist('regdelegate')
        delid = Delegate.objects.get(id=tosave[0])
        EventDelegate.objects.create(event_id=eventid,delegate_id=delid)

    return HttpResponseRedirect('/view-events')

urls.py

...
path('register-delegates', views.register_delegates),

1 Ответ

1 голос
/ 24 января 2020

Ну из комментариев я понимаю, что вы правильно получаете значение regdelegate. Но, как говорится в сообщении об ошибке, вы используете объект Delegate, где он ожидает целое число. Вы можете решить эту проблему:

EventDelegate.objects.create(event_id=eventid, delegate=delid)

ИЛИ

EventDelegate.objects.create(event_id=eventid, delegate_id=tosave[0])

Наконец, вы можете использовать для l oop для итерации и создания EventDelegate объекта:

for delid in tosave:  # maybe use a better variable name then tosave to improve code readability
    EventDelegate.objects.create(event_id=eventid, delegate_id=delid)
...