首页 > 解决方案 > 如何在模板中发送已检查的表行以在 django db 中查看和创建多个数据行?

问题描述

基本上我的模型中有三个表:
1) 代表 - 存储所有代表
2) 事件 - 存储所有事件
3) EventDelegate - 代表和事件之间的关系(哪个代表为哪个事件注册)

代表表显示在每个事件的模板中,该模板还包含该事件,我在每行旁边放置了一个复选框以保存选中的行并将所有选中行的 id 发送到视图函数,以便我可以插入 id使用循环代表 EventDelegate 表以及相同的 eventid(每行将保持相同,因为我从每个事件页面发送数据)。
所以最后我应该能够从每个事件页面的所有列表中检查代表,然后单击提交会将他们的 ID 和事件 ID 添加到 EventDelegate 表中。我做了一些事情,但没有按照应有的方式工作,直到现在分享我的工作:-

模型.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>

视图.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')

网址.py

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

标签: djangopython-3.xsqlitedjango-modelsdjango-templates

解决方案


我从评论中了解到,您正在regdelegate正确接收价值。但正如错误所说,您正在使用该Delegate对象,它需要一个整数。您可以通过以下任一方式解决此问题:

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

或者

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

最后,您可以使用 for 循环来迭代和创建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)

推荐阅读