django - 如何在模板中发送已检查的表行以在 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),
解决方案
我从评论中了解到,您正在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)
推荐阅读
- jquery - jQuery weekpicker,firstDay 设置为星期一。但是周日选错了一周
- mongodb - mongodb 不显示数据库和集合
- r - “错误:行的重复标识符”及其一些子集,但不是其他子集
- unit-testing - 测试reducer初始状态的错误
- java - java.lang.IndexOutOfBoundsException:索引:308,大小:308
- javascript - 修复 d3.js v4 工具提示位置
- r - 在R中的循环中引用元素
- php - PHP提交表单无法正常工作
- sql - 如果记录为 NULL,则返回所有记录并显示消息
- reactjs - React-native-maps 因版本错误而失败